我很困惑这是更有效?
正如我们可以直接访问地图,为什么我们需要用找?
我只需要知道哪种方式更有效。
#include <iostream>
#include <map>
using namespace std;
int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;
mymap['a']=50;
mymap['b']=100;
mymap['c']=150;
mymap['d']=200;
//one way
it=mymap.find('b');
cout << (*it).second <<endl;
//another way
cout << mymap['b'] <<endl;
return 0;
}
提前致谢! :)
使用find
意味着,你不小心在地图上创建一个新的元素,如果该键不存在,以及-更重要的是-这意味着你可以使用find
查找元素如果你所有的是一个常数参照地图。
当然,这意味着你应该检查返回值find
。 通常,它是这样的:
void somewhere(const std::map<K, T> & mymap, K const & key)
{
auto it = mymap.find(key);
if (it == mymap.end()) { /* not found! */ }
else { do_something_with(it->second); }
}
正如我们可以直接访问地图,为什么我们需要用找?
因为map<>::operator[]
是有时讨厌。 如果一个元素不存在,那么:
因此,它总是返回的值是有效的引用,即使先前存在的关键din't。 这种行为并不打算多次。
在另一方面map<>::find()
是安全的; 因为它返回的end()
如果值不退出。 的另一个优点find()
是,它返回它包含密钥(引用一个迭代器first
)和价值( second
)两种。
在地图[]操作不是恒定它是对数的。 大部分的书籍强调这一事实,并指出这是一个有点误导。 因此,无论找到和[]经营者具有相同的复杂性。
请注意,[]操作将创建该条目,即使它不存在,同时发现将在这种情况下返回结束()。
此代码和文档从采摘cplusplus.com
// accessing mapped values
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main ()
{
map<char,string> mymap;
mymap['a']="an element";
mymap['b']="another element";
mymap['c']=mymap['b'];
cout << "mymap['a'] is " << mymap['a'] << endl;
cout << "mymap['b'] is " << mymap['b'] << endl;
cout << "mymap['c'] is " << mymap['c'] << endl;
cout << "mymap['d'] is " << mymap['d'] << endl;
cout << "mymap now contains " << (int) mymap.size() << " elements." << endl;
return 0;
}
OP:
mymap['a'] is an element
mymap['b'] is another element
mymap['c'] is another element
mymap['d'] is
mymap now contains 4 elements.
请注意如何上次访问(以元素“d”)与该按键映射插入一个新的元素并初始化为它的默认值(空字符串),即使它只是访问以检索其值。 会员功能地图::找到不会产生这种效果。