在 stdmap 或 stdmultimap 中搜索
有几种方法可以在 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; //prints: 6, 5 else std::cout << "Value does not exist!" << std::endl; it = mmp.find(66); if(it!=mmp.end()) std::cout << it->first << ", " << it->second << std::endl; else std::cout << "Value does not exist!" << std::endl; // This line would be executed.
-
查找
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 exists as a key in map std::cout << "The key exists!" << std::endl; // This line would be executed. else std::cout << "The key does not exist!" << 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; } // prints: 6, 5 // 6, 7