📅  最后修改于: 2023-12-03 14:39:55.531000             🧑  作者: Mango
映射键是一种将一个键映射到另一个键或值的数据结构。在 C++ 中,可以使用 std::map
或 std::unordered_map
来实现映射键。
std::map
是一个有序的关联容器,它将一个键映射到一个值。插入键值对时,std::map
会根据键的顺序自动排序。以下是示例代码:
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 75;
scores["Charlie"] = 80;
std::cout << "Alice's score: " << scores["Alice"] << "\n";
std::cout << "Bob's score: " << scores["Bob"] << "\n";
std::cout << "Charlie's score: " << scores["Charlie"] << "\n";
return 0;
}
输出结果:
Alice's score: 95
Bob's score: 75
Charlie's score: 80
在上面的例子中,我们先定义了一个 std::map
对象 scores
,它将键为 std::string
类型的学生姓名映射到键为 int
类型的成绩。然后我们插入了三对键值对,使用 std::cout
输出了每个学生的成绩。
当我们使用 std::map[key]
获取某个键的值时,如果该键不存在,std::map
会自动插入一个默认值并返回(默认值为 0)。如果我们想在获取某个键的值时,如果该键不存在,则返回一个指定的默认值,可以使用 std::map::find()
方法。示例代码如下:
#include <iostream>
#include <map>
int main() {
std::map<std::string, std::string> phone_book = {
{"Alice", "1234567890"},
{"Bob", "2345678901"},
{"Charlie", "3456789012"}
};
auto it = phone_book.find("David");
if (it == phone_book.end()) {
std::cout << "David's phone number not found\n";
} else {
std::cout << "David's phone number: " << it->second << "\n";
}
return 0;
}
输出结果:
David's phone number not found
在上面的例子中,我们先定义了一个 std::map
对象 phone_book
,它将键为 std::string
类型的人名映射到键为 std::string
类型的电话号码。然后我们使用 std::map::find()
方法,查找键为 "David" 的电话号码。如果找到了电话号码,则输出。如果没有找到,则输出提示信息。
std::unordered_map
是一个无序的关联容器,它将一个键映射到一个值。插入键值对时,std::unordered_map
不会根据键的顺序进行排序。以下是示例代码:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 75;
scores["Charlie"] = 80;
std::cout << "Alice's score: " << scores["Alice"] << "\n";
std::cout << "Bob's score: " << scores["Bob"] << "\n";
std::cout << "Charlie's score: " << scores["Charlie"] << "\n";
return 0;
}
输出结果:
Alice's score: 95
Bob's score: 75
Charlie's score: 80
在上面的例子中,我们先定义了一个 std::unordered_map
对象 scores
,它将键为 std::string
类型的学生姓名映射到键为 int
类型的成绩。然后我们插入了三对键值对,使用 std::cout
输出了每个学生的成绩。
当我们使用 std::unordered_map[key]
获取某个键的值时,如果该键不存在,std::unordered_map
会自动插入一个默认值并返回(默认值为 0)。如果我们想在获取某个键的值时,如果该键不存在,则返回一个指定的默认值,可以使用 std::unordered_map::find()
方法。示例代码如下:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, std::string> phone_book = {
{"Alice", "1234567890"},
{"Bob", "2345678901"},
{"Charlie", "3456789012"}
};
auto it = phone_book.find("David");
if (it == phone_book.end()) {
std::cout << "David's phone number not found\n";
} else {
std::cout << "David's phone number: " << it->second << "\n";
}
return 0;
}
输出结果:
David's phone number not found
在上面的例子中,我们先定义了一个 std::unordered_map
对象 phone_book
,它将键为 std::string
类型的人名映射到键为 std::string
类型的电话号码。然后我们使用 std::unordered_map::find()
方法,查找键为 "David" 的电话号码。如果找到了电话号码,则输出。如果没有找到,则输出提示信息。
映射键是一个非常常见的数据结构,C++ 中可以使用 std::map
或 std::unordered_map
来实现。std::map
是一个有序的关联容器,它将键按照顺序进行排序;std::unordered_map
是一个无序的关联容器,它的插入和查找操作都比 std::map
更快。在使用时,我们需要根据实际情况选择使用哪个容器。