区别是什么?
我希望能够看到一个元素是否在HashMap中,我发现如果我执行h [element],它将返回默认元素(如果找不到),而不是null。我如何使用迭代器查找方法来查看元素是否存在?
由于
答案 0 :(得分:6)
假设您正在谈论STL而不是某些第三方库... m[key]
如果键不在地图中,则不会返回默认对象。它将使用该键创建地图中的新元素,并将默认构造的对象作为值。
你可以用这个:
map<string, int> mymap;
//add items to it
map<string, int>::iterator it = mymap.find("key");
if (it != myMap.end()) {
// 'key' exists; (it->second) is the corresponding int
}
或者,如果您不需要获取对象(您只想知道它是否存在):
map<string, int> mymap;
//add items to it
if (mymap.count("key") == 1) {
// 'key' exists
}
答案 1 :(得分:2)
使用find方法查看某些内容是否在std :: map
中std::map<std::string, std::string> myMap
std::map<std::string, std::string>::iterator it = myMap.find("foo");
if(it != myMap.end()) {
//foo is in the map
} else {
// foo isn't in the map
}
const_iterator
是一个迭代器,当它被引用时返回它指向的任何const版本。在上面的示例中,如果it
为const_iterator
,则取消引用它将产生const std::string
答案 2 :(得分:1)
主要区别在于const_iterator
不能用于修改地图中元素的值。
使用find
方法
hash_map <int, int> hm1;
hash_map <int, int> :: const_iterator hm1_RcIter = hm1.find( 2 );
if ( hm1_RcIter == hm1.end( ) )
cout << "The hash_map hm1 doesn't have an element "
<< "with a key of 2." << endl;
else
cout << "The element of hash_map hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
答案 3 :(得分:1)
正如其他答案所解释的那样,对于std::map
,您可以使用find
。
回答标题中的问题:
对于迭代器,const
可以引用迭代器本身,也可以引用迭代器指向的内容。两个属性都是正交的。使用STL表示法,您有以下情况:
iterator
可以修改内容和迭代器。const_iterator
内容为const,迭代器可以修改const iterator
内容可以修改,迭代器是常量。const const_iterator
内容和迭代器是不变的。指针类似。在那里,const也可以引用内容或指针本身。
答案 4 :(得分:0)