C++ 把A和B存在同一个容器中,一一对应,可以通过A查找B,也可通过B查找A
时间: 2024-09-18 19:16:11 浏览: 21
在C++中,如果需要将A和B对象一对一地存储并能够双向查找,可以使用关联容器(如std::map、std::unordered_map、std::pair等),特别是std::pair。std::pair是一个内置的数据结构,它包含两个元素,通常用于表示成对的数据。
例如,你可以创建一个std::map,键是A类型,值是B类型:
```cpp
std::map<A, B> myMap;
```
在这个映射中,每个A对象都会有一个对应的B对象,你可以通过A的实例来查找其关联的B,同样,如果你有一个B对象,也可以查找与其相关的A。访问它们的方式通常是通过提供的键(A的对象)来调用`find`函数,或者直接通过索引:
```cpp
// 查找A对应的B
B* b = myMap.find(a).second; // 如果找到,则返回指向B的指针
// 或者通过迭代器查找
for (const auto& pair : myMap) {
if (pair.first == a) {
B& bValue = pair.second; // 使用&获取引用,避免复制
// 对bValue进行操作...
}
}
```
相关问题
c++中map的find函数用法
在C++中,map是一种关联容器,它将键和值一一对应,可以通过键快速查找值。map的find函数用于查找指定键是否存在,并返回对应的迭代器。
以下是map的find函数的语法:
```c++
map_name.find(key);
```
其中,map_name是map的名称,key是要查找的键。find函数的返回值是一个迭代器,如果找到了指定的键,则返回指向该键值对的迭代器;如果没有找到,则返回指向map末尾的迭代器。
以下是一个示例代码,演示如何使用map的find函数:
```c++
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> phone_book;
phone_book["Alice"] = 123456;
phone_book["Bob"] = 234567;
phone_book["Charlie"] = 345678;
// 查找键为 "Bob" 的值
map<string, int>::iterator it = phone_book.find("Bob");
if (it != phone_book.end()) {
cout << "Bob's phone number is: " << it->second << endl;
}
else {
cout << "Bob's phone number not found." << endl;
}
// 查找键为 "David" 的值
it = phone_book.find("David");
if (it != phone_book.end()) {
cout << "David's phone number is: " << it->second << endl;
}
else {
cout << "David's phone number not found." << endl;
}
return 0;
}
```
输出结果为:
```
Bob's phone number is: 234567
David's phone number not found.
```
在这个示例代码中,首先创建了一个名为phone_book的map,用来存储人名和电话号码。然后通过[]运算符将几个名字和电话号码添加到map中。
接着使用find函数查找键为"Bob"和"David"的电话号码。对于"Bob",找到了对应的键值对,输出了电话号码;对于"David",没有找到对应的键值对,输出了提示信息。
C++ map如何使用
C++中的map是一种关联容器,它将键和值一一对应。使用map时,可以通过键来访问对应的值,就像使用数组时通过下标来访问元素一样。
以下是一个简单的使用C++ map的示例程序:
```c++
#include <iostream>
#include <map>
using namespace std;
int main()
{
// 定义一个map,键是string类型,值是int类型
map<string, int> scores;
// 添加键值对
scores["Alice"] = 90;
scores["Bob"] = 80;
scores["Charlie"] = 70;
// 使用迭代器遍历map
for (auto it = scores.begin(); it != scores.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
// 查找键为"Alice"的值
auto it = scores.find("Alice");
if (it != scores.end()) {
cout << "Alice's score is " << it->second << endl;
} else {
cout << "Alice is not found" << endl;
}
// 删除键为"Charlie"的键值对
scores.erase("Charlie");
// 使用范围for循环遍历map
for (auto& [name, score] : scores) {
cout << name << ": " << score << endl;
}
return 0;
}
```
输出结果为:
```
Alice: 90
Bob: 80
Charlie: 70
Alice's score is 90
Alice: 90
Bob: 80
```
在上面的示例程序中,我们首先定义了一个map对象`scores`,然后向它添加了三个键值对。接着使用迭代器遍历map,并查找键为"Alice"的值,最后删除键为"Charlie"的键值对。最后,使用范围for循环遍历map并输出每个键值对的键和值。
阅读全文