C++ map映射 int映射到string

  • 需求:输入不同的int类型数据,得到各自对应的字符串

  • 分析:使用map,该功能类似Python的字典

节选该部分的代码

#include <fstream>
#include <string.h>
#include <iostream>
#include <streambuf>
#include <sstream>
#include <vector>
#include <functional>

#include <map>

// 使用map将数字映射成字符串
static map<int, string> EncodeMap;

void main(){

    //  insert
    EncodeMap.insert(pair<int, string>(1, "Left A"));
    EncodeMap.insert(pair<int, string>(2, "Left B"));
    EncodeMap.insert(pair<int, string>(3, "Left C"));
    EncodeMap.insert(pair<int, string>(4, "Left D"));
    EncodeMap.insert(pair<int, string>(5, "UP"));
    EncodeMap.insert(pair<int, string>(10, "Right A"));
    EncodeMap.insert(pair<int, string>(9, "Right B"));
    EncodeMap.insert(pair<int, string>(8, "Right C"));
    EncodeMap.insert(pair<int, string>(7, "Right D"));
    EncodeMap.insert(pair<int, string>(6, "UP"));


	// 使用数组形式访问
	for(int i = 1; i<= 10; i++){
		cout << EncodeMap[i] << endl;;
	}

}

  • map还支持其他类型的映射,大家可以根据需求进行修改
### C++ `map` 容器映射函数及其用法 #### 访问元素 为了通过给定的键值访问 `map` 中的元素,可以使用 `at()` 函数。此函数会查找指定键对应的元素并返回其引用;如果未找到,则抛出异常 `out_of_range`。 ```cpp #include <iostream> #include <map> int main() { std::map<int, char> myMap; // 插入数据到 map myMap.insert(std::pair<int, char>(1, 'a')); myMap.insert({2, 'b'}); try { // 使用 at 获取元素 std::cout << "Element with key 1 is: " << myMap.at(1) << '\n'; // 尝试获取不存在的元素 (这将引发 out_of_range 异常) std::cout << "Element with key 3 is: " << myMap.at(3); } catch(const std::out_of_range& e){ std::cerr << "Error accessing element: " << e.what(); } } ``` 上述程序展示了如何利用 `at()` 方法安全地检索存储于 `map` 结构内的项目[^1]。 #### 迭代遍历 对于遍历整个 `map` 或者执行某些操作,推荐采用标准模板库(STL)提供的算法来处理容器中的每一个条目。下面的例子说明了怎样运用 `for_each` 来迭代所有项: ```cpp #include <algorithm> #include <iostream> #include <map> void printPair(const std::pair<const int, char>& p) { std::cout << "[" << p.first << ": " << p.second << "] "; } int main(){ std::map<int, char> sample{{0,'z'},{1,'y'}}; // 遍历 map 并打印每一对键值对 std::for_each(sample.begin(), sample.end(), printPair); } ``` 这段代码片段体现了 STL 算法的强大之处,在这里是对 `map` 执行了一个简单的输出任务[^2]。 #### 替换内容 当涉及到替换两个相同类型的 `map` 变量之间的全部内容时,可以直接调用全局版本或是成员版的 `swap()` 函数来进行快速互换而不必逐个复制或移动元素。 ```cpp #include <utility> // For swap() #include <iostream> #include <map> int main(){ std::map<std::string,std::string> first{ {"one","ONE"},{"two","TWO"} }; std::map<std::string,std::string> second{ {"three","THREE"},{"four","FOUR"} }; // 输出交换前的状态 for(auto &p : first){ std::cout<<p.first<<"->"<<p.second<<"\t"; } std::cout<<"\n"; for(auto &q : second){ std::cout<<q.first<<"->"<<q.second<<"\t"; } std::cout<<"\n"; // 调用 swap 成员函数进行交换 first.swap(second); // 输出交换后的状态 for(auto &r : first){ std::cout<<r.first<<"->"<<r.second<<"\t"; } std::cout<<"\n"; for(auto &s : second){ std::cout<<s.first<<"->"<<s.second<<"\t"; } } ``` 这个例子清晰地展现了两种不同方式下的 `swap()` 应用场景以及效果对比[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值