std::map多个key值

       传统的std::map只能表示<key,value>的形式,即一个key对应一个value,但在实际应用场合中,这往往受到了限制。

        举个简单的例子,一个学生假如选择了多门课程,在数据库中是<学号,课程>的形式,我们想将它读入数据库中,并快速的进行访问。

        我们可以通过构建一个简单的map结构就可以完成这一功能:

        std::map <int student_num,  std::set<std::string> > student_num_course;

        //读入

        student_num_course[1].insert("语文");

        student_num_course[1].insert("数学");

         // 访问

         std::set<std::string>::iterator it=student_num_course[1].begin();

        for(; it != student_num_course[1].end(); it++)

        {

                 cout << *it<<"\t";

        }

        对于value(课程),我们使用vector容器也可以完成同样的功能,但区别在于,vector是顺序容器、而set是关联容器,元素作为键值,因此set中不存在重复的元素,这点在关键时候有着重要的作用。例如在数据库中,用户向其中添加了一条重复数据,利用vector存储该结构有导致不能预期的问题,而set则有利的避免了这一点。


        multi_map:

        http://www.yolinux.com/TUTORIALS/CppStlMultiMap.html

std::mapC++标准库中的一个关联容器,它将一对键(key-value)存在一个有序的集合中。默认情况下,std::map使用std::less来对key进行升序排列,可以使用std::greater来对key进行降序排序。 举个例子,如果我们创建一个std::map对象t,并插入一些键对,如t.insert(std::make_pair(1, "a")); t.insert(std::make_pair(2, "b")); t.insert(std::make_pair(3, "c")); t.insert(std::make_pair(4, "d"));,那么t中的键对的顺序将按照key的升序排序,即{1: "a", 2: "b", 3: "c", 4: "d"}。如果我们想要按照降序排序,可以使用std::greater作为std::map的第三个模板参数,即std::map<int, std::string, std::greater<int>> t;。这样,t中的键对的顺序将按照key的降序排序,即{4: "d", 3: "c", 2: "b", 1: "a"}。 关于std::mapstd::unordered_mapkey为字符串的问题,可能是你在使用时遇到了一些困惑。如果有具体的问题或示例代码,可以提供更多细节,我可以帮助你解决。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [利用std::mapstd::greater对key进行降序排列](https://blog.csdn.net/hp_cpp/article/details/109294914)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++ map 根据valuekey的实现](https://download.csdn.net/download/weixin_38647039/13759929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C++ std::mapstd::unordered_mapkey 为 字符串的一些问题](https://blog.csdn.net/linjf520/article/details/107265219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值