有几种方法可以搜索中std::map或中的键std::multimap。
要获得第一次出现键的迭代器,find()可以使用该函数。end()如果密钥不存在,则返回。
std::multimap< int , int > mmp{ {1, 2}, {3, 4}, {6, 5}, {8, 9}, {3, 4}, {6, 7} };
auto it = mmp.find(6);
if(it!=mmp.end())
std::cout << it->first << ", " << it->second << std::endl; //印数:6、5
else
std::cout << "价值不存在!" << std::endl;
it = mmp.find(66);
if(it!=mmp.end())
std::cout << it->first << ", " << it->second << std::endl;
else
std::cout << "价值不存在!" << std::endl; // 这行将被执行。
找到是否存在一个条目的另一种方式std::map或std::multimap使用count()功能,计数多少值与给定键关联。由于std::map每个键仅关联一个值,因此其count()功能只能返回0(如果不存在键)或1(如果存在)。对于std::multimap,count()可以返回大于1的值,因为可能有多个与同一个键关联的值。
std::map< int , int > mp{ {1, 2}, {3, 4}, {6, 5}, {8, 9}, {3, 4}, {6, 7} };
if(mp.count(3) > 0) // 3作为键存在于映射中
std::cout << "钥匙存在!" << std::endl; // 这行将被执行。
else
std::cout << "密钥不存在!" << std::endl;
如果您只关心某个元素是否存在,那find绝对是更好的选择:它记录您的意图,并且对于multimaps,一旦找到第一个匹配元素,它就可以停止。
在的情况下std::multimap,可能会有多个具有相同键的元素。要获得此范围,请使用该equal_range()函数,该函数分别返回std::pair具有迭代器的下限(包括)和上限(不包括)。如果密钥不存在,则两个迭代器都将指向end()。
auto eqr = mmp.equal_range(6);
auto st = eqr.first, en = eqr.second;
for(auto it = st; it != en; ++it){
std::cout << it->first << ", " << it->second << std::endl;
}
// 印数:6、5
// 6, 7