C++中map的基本用法和嵌套用法实例分析
什么是map?
map是C++ STL中的一个关联容器,其内部实现是“红黑树”,可以实现快速查找,查找效率高于vector和deque。
map容器中的元素以键值对的形式存储,支持根据键快速查找值,键和值可以是任意类型,但是键必须是可以比较的。
map的基本用法
创建map容器
#include <map>
std::map<int, std::string> myMap;
上述代码创建了一个map容器,其中键的类型为int,值的类型为string。
插入元素
可以使用insert函数向map容器中插入元素:
myMap.insert(std::make_pair(1, "One"));
也可以使用以下方式直接访问map的下标:
myMap[1] = "One";
删除元素
使用erase函数删除map容器中的元素:
myMap.erase(1);
查找元素
可以使用find函数查找元素:
std::map<int, std::string>::iterator iter = myMap.find(1);
如果找到了,则iter指向对应的键值对;否则,iter指向end()函数返回的迭代器。
遍历元素
使用迭代器遍历map容器中的元素:
for (std::map<int, std::string>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter) {
std::cout << "Key: " << iter->first << ", Value: " << iter->second << std::endl;
}
map的嵌套用法
map可以作为另一个map的值,从而实现嵌套的效果。
创建嵌套map容器
std::map<int, std::map<int, std::string>> myNestedMap;
插入元素
向嵌套map容器中插入元素时,需要指定两个键值:
myNestedMap[1][1] = "One:One";
删除元素
同样使用erase函数删除嵌套map容器中的元素:
myNestedMap[1].erase(1);
查找元素
查找嵌套map容器中的元素时,需要按照两个键值一一查找:
std::map<int, std::map<int, std::string>>::iterator iter1 = myNestedMap.find(1);
if (iter1 != myNestedMap.end()) {
std::map<int, std::string>::iterator iter2 = iter1->second.find(1);
if (iter2 != iter1->second.end()) {
std::cout << "Key1: " << iter1->first << ", Key2: " << iter2->first << ", Value: " << iter2->second << std::endl;
}
}
遍历元素
使用双重循环遍历嵌套map容器中的元素:
for (std::map<int, std::map<int, std::string>>::iterator iter1 = myNestedMap.begin(); iter1 != myNestedMap.end(); ++iter1) {
for (std::map<int, std::string>::iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end(); ++iter2) {
std::cout << "Key1: " << iter1->first << ", Key2: " << iter2->first << ", Value: " << iter2->second << std::endl;
}
}
示例1:统计字符串中每个字符出现的次数
以下代码统计字符串“hello, world”中每个字符出现的次数:
#include <iostream>
#include <map>
int main() {
std::string str = "hello, world";
std::map<char, int> charCount;
for (char c : str) {
if (c != ' ') {
charCount[c]++;
}
}
for (std::map<char, int>::iterator iter = charCount.begin(); iter != charCount.end(); ++iter) {
std::cout << iter->first << ": " << iter->second << std::endl;
}
return 0;
}
输出结果为:
,: 1
d: 1
e: 1
h: 1
l: 3
o: 2
r: 1
w: 1
示例2:多个map容器的嵌套实现棋盘
以下代码构建一个9x9的棋盘,其中黑子用字母“B”表示,白子用字母“W”表示:
#include <iostream>
#include <map>
const int BOARD_SIZE = 9;
int main() {
std::map<int, std::map<int, std::string>> board;
for (int i = 1; i <= BOARD_SIZE; ++i) {
for (int j = 1; j <= BOARD_SIZE; ++j) {
if (i % 2 == 0) {
board[i][j] = (j % 2 == 0) ? "W" : "B";
} else {
board[i][j] = (j % 2 == 0) ? "B" : "W";
}
}
}
for (int i = 1; i <= BOARD_SIZE; ++i) {
for (int j = 1; j <= BOARD_SIZE; ++j) {
std::cout << board[i][j];
}
std::cout << std::endl;
}
return 0;
}
输出结果为:
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
以上就是关于C++中map的基本用法和嵌套用法实例分析的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++中map的基本用法和嵌套用法实例分析 - Python技术站