具有单个键的多个值的STL集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有单个键的多个值的STL集合相关的知识,希望对你有一定的参考价值。

从sql我有一个输出:

id value
123 xxx
124 xxx
124 yyy
125 xxx

我在c ++代码中处理此输出,其中我想使用123,125个ID(唯一)和124分别具有多个值。

基本上,我想分别存储唯一和多值id,后来想要单独检索它们。

我可以使用任何stl容器。

比如container1存储唯一值

123 xxx
125 xxx

container2的

124 xxx
124 yyy

在地图中我可以分别拥有唯一的键值对:(123->xxx)(125->xxx)124->xxx,yyy吗?

有人可以帮我创造更好的设计吗?

答案

最简单的方法是std::map<int, std::vector<std::string> >(用你的类型取代std::string),如下:

#include <iostream>
#include <string>
#include <map>
#include <vector>

int main()
{
  std::map< int, std::vector< std::string > > map; // could use std::unordered_map as well for O(1) lookup if order of keys doesn't matter
  map[123].push_back("AAA");
  map[124].push_back("BBB");
  map[124].push_back("CCC");
  map[125].push_back("DDD");
  for(auto itr = map.begin(); itr!=map.end(); itr++) {
      std::cout<<itr->first<<":";
      for(auto vitr = itr->second.begin(); vitr != itr->second.end(); vitr++){
          std::cout<<*vitr<<",";
      }
      std::cout<<std::endl;
  }
}

输出:

123:AAA,
124:BBB,CCC,
125:DDD,

根据您的描述,有些不清楚是否可以接受将每个键处理,无论有多少条目,都可以作为值列表。但如果是这样,这是最简单的方法。

另一答案

已经有对这种容器的标准支持。

std::multisetstd::multimap正是您要找的。

http://en.cppreference.com/w/cpp/container/multiset http://en.cppreference.com/w/cpp/container/multimap

以上是关于具有单个键的多个值的STL集合的主要内容,如果未能解决你的问题,请参考以下文章

从单个按钮从多个片段中提取数据

ColdFusion:具有多个外键的 ORM 集合

解析文件并将其存储到具有Node js中多个值的Map函数中

如何处理单个活动的多个片段

如何创建具有多个键的 NSDictionary?

如何从 MongoDB 中具有多个集合的数据库中访问单个集合数据