C++ STL中在map或multimap中查找元素

C++ STL中在map或multimap中查找元素

诸如 map 和 multimap 等关联容器都提供了成员函数 find(),它让您能够根据给定的键查找值。
find( )总是返回一个迭代器:
multimap <int, string>::const_iterator pairFound = mapIntToStr.find(key);
您应首先检查该迭代器,确保 find( )已成功,再使用它来访问找到的值:
if (pairFound != mapIntToStr.end())
{
cout << "Key " << pairFound->first << " points to Value: ";
cout << pairFound->second << endl;
}
else
cout << “Sorry, pair with key " << key << " not in map” << endl;
如果您使用的编译器遵循 C++11 标准,可使用关键字 auto 来简化迭代器声明:
auto pairFound = mapIntToStr.find(key);
编译器将根据 map::find( )的返回类型自动推断出迭代器的类型。
程序清单 20.3 演示了 multimap::find()的用法

0: #include <map>
1: #include <iostream>
2: #include <string>
3: using namespace std;
4:
5: template <typename T>
6: void DisplayContents (const T& cont)
7: {
8: for (auto element = cont.cbegin();
9: element != cont.cend();
10: ++ element )
11: cout << element->first << " -> " << element->second << endl;
12:
13: cout << endl;
14: }
15:
16: int main()
17: {
18: map<int, string> mapIntToStr;
19:
20: mapIntToStr.insert(make_pair(3, "Three"));
21: mapIntToStr.insert(make_pair(45, "Forty Five"));
22: mapIntToStr.insert(make_pair(-1, "Minus One"));
23: mapIntToStr.insert(make_pair(1000, "Thousand"));
24:
25: cout << "The multimap contains " << mapIntToStr.size();
26: cout << " key-value pairs. They are: " << endl;
27:
28: // Print the contents of the map to the screen
29: DisplayContents(mapIntToStr);
30:
31: cout << "Enter the key you wish to find: ";
32: int key = 0;
33: cin >> key;
34:
35: auto pairFound = mapIntToStr.find(key);
36: if (pairFound != mapIntToStr.end())
37: {
38: cout << "Key " << pairFound->first << " points to Value: ";
39: cout << pairFound->second << endl;
40: }
41: else
42: cout << "Sorry, pair with key " << key << " not in map" << endl;
43:
44: return 0;
45: }

输出:
The multimap contains 4 key-value pairs. They are:
-1 -> Minus One
3 -> Three
45 -> Forty Five
1000 -> Thousand
Enter the key you wish to find: 45
Key 45 points to Value: Forty Five
再次运行的输出(这次 find( )没有找到匹配的元素):
The multimap contains 4 key-value pairs. They are:
-1 -> Minus One
3 -> Three
45 -> Forty Five
1000 -> Thousand
Enter the key you wish to find: 2011
Sorry, pair with key 2011 not in map
分析:
在 main( )函数中,第 20~23 行使用几个键-值对填充一个 map,每个键-值对都将整型键映射到字
符串值。用户指定要用于在 map 中查找元素的键后,第 35 行使用函数 find( )根据指定的键在 map 中进
行查找。 map::find( )总是返回一个迭代器,核实 find( )操作成功总是明智的,为此可将返回的迭代器与
end( )进行比较,如第 36 行所示。如果该迭代器有效,则通过成员 second 访问值,如第 39 行所示。第
二次运行时,您指定的键 2011 不包含在 map 中,因此显示了一条错误消息。

使用 find( )返回的迭代器之前,务必通过检查迭代器核实 find( )操作成功了
  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ STLmapmultimap是关联容器,用于存储键值对(key-value pairs),其每个键(key)唯一对应一个值(value)。 map是一个有序容器,根据键的大小进行自动排序,默认按照键的升序进行排序。每个键只能在map出现一次,如果尝试插入具有相同键的元素,新元素将替代旧元素multimap也是一个有序容器,与map不同的是,它允许多个具有相同键的元素存在。多个具有相同键的元素将按照插入的顺序进行存储,而不会自动排序。 这两个容器都提供了一系列的操作函数,如insert、erase、find等,用于插入、删除和查找元素。 以下是一个使用map的简单示例: ```cpp #include <iostream> #include <map> int main() { std::map<std::string, int> scores; scores.insert(std::make_pair("Alice", 90)); scores.insert(std::make_pair("Bob", 80)); scores.insert(std::make_pair("Charlie", 70)); // 查找并输出Bob的分数 std::cout << "Bob's score: " << scores["Bob"] << std::endl; // 遍历并输出所有键值对 for (const auto& pair : scores) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` 上述示例,我们创建了一个存储string类型键和int类型值的map容器scores。通过insert函数依次插入了三个键值对。然后我们通过scores["Bob"]来获取Bob的分数,并输出结果为80。 接着我们使用范围-based for循环遍历map的所有键值对,并输出每个键值对的键和值。 multimap的用法与map类似,只是它允许多个具有相同键的元素存在。 这些关联容器在查找和插入操作上具有较高的效率,特别适用于需要根据键进行快速查找的场景。在实际应用,你可以根据自己的需求选择适合的容器类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值