C++ 无序映射
C++ Unordered Map
我有一个程序,我在其中使用迭代器来访问映射条目的值。
#include <iostream>
#include <cstdio>
#include <unordered_map>
#include <utility>
#include <algorithm>
using namespace std;
int main()
{
int a[]={1,2,4,7,9,3,3,55,66,88,11};
int k = 58;
unordered_map<int,int> c;
int i=0;
for(auto x: a)
{
c.insert(make_pair(x,i));
i++;
}
for(auto x: c)
{
if(c.count(k-x.first)==1) printf("%d %d\n",x.second,(c.find(k-x))->second);
}
}
行中:
if(c.count(k-x.first)==1) printf("%d %d\n",x.second,(c.find(k-x))->second);
我遇到错误,尤其是在 c.find()->second
中。我认为这是从迭代器访问元素的方式。怎么了?
你不能说
c.find(k-x)
因为 k
是一个 int
而 x
是一个 std::pair<int, int>
。你是指这两者之一吗?
c.find(k - x.first)
或
c.find(k - x.second)
作为旁注,直接从 find
中取消引用返回的迭代器通常是不安全的,因为如果 find
returns .end()
(如,它没有找不到具有该键的元素)那么你就有问题了。
我有一个程序,我在其中使用迭代器来访问映射条目的值。
#include <iostream>
#include <cstdio>
#include <unordered_map>
#include <utility>
#include <algorithm>
using namespace std;
int main()
{
int a[]={1,2,4,7,9,3,3,55,66,88,11};
int k = 58;
unordered_map<int,int> c;
int i=0;
for(auto x: a)
{
c.insert(make_pair(x,i));
i++;
}
for(auto x: c)
{
if(c.count(k-x.first)==1) printf("%d %d\n",x.second,(c.find(k-x))->second);
}
}
行中:
if(c.count(k-x.first)==1) printf("%d %d\n",x.second,(c.find(k-x))->second);
我遇到错误,尤其是在 c.find()->second
中。我认为这是从迭代器访问元素的方式。怎么了?
你不能说
c.find(k-x)
因为 k
是一个 int
而 x
是一个 std::pair<int, int>
。你是指这两者之一吗?
c.find(k - x.first)
或
c.find(k - x.second)
作为旁注,直接从 find
中取消引用返回的迭代器通常是不安全的,因为如果 find
returns .end()
(如,它没有找不到具有该键的元素)那么你就有问题了。