2015-03-19 78 views
1

从SQL多个值我有一个输出:STL集合与单个键

 
id value 
123 xxx 
124 xxx 
124 yyy 
125 xxx 

予处理在C++代码本输出,其中我想使用123,125 IDS(唯一的)和124,其具有多个值分开。

基本上,我想单独存储独特和多值标识,以后想单独检索它们。

我可以使用任何stl容器。

说container1店独特的价值观

 
123 xxx 
125 xxx 

container2的

 
124 xxx 
124 yyy 

在地图上,我可以有独特的键值对:(123->xxx),分别(125->xxx)124->xxx,yyy

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

+6

您好,欢迎堆栈溢出。我不知道你究竟在问什么。我怀疑你还没有真正完全解释过所有的东西(只是概述)。如果我们所有的内容都是概述,请告诉我们:a)您期望看到的内容(包括示例数据和示例结果); b)您观察到的内容(包括任何错误或日志); c)相关部分你尝试过的代码(即使破坏了),或者至少有一些伪代码d)你对这个主题所做的任何研究。注意:不要在评论中回答 - 编辑您的问题并将其添加到那里。 – 2015-03-19 03:37:49

+0

改进了格式。澄清的问题:这不是真的关于SQL,这些id值对来自哪里并不重要。问题是关于在这种情况下使用适当的收集。这个问题将受益于代码示例和特定问题。 – 2015-03-19 04:44:55

+0

查看std :: multimap:http://www.cplusplus.com/reference/map/multimap/ – CinCout 2015-03-19 06:00:31

回答

4

最简单的方法是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, 

从你的描述它,如果它是可以接受的有点不清楚将每个关键字(无论有多少条目)视为值列表。但如果是这样,这是最直接的方式。

+0

嗨aruisdante,谢谢你的回复,,有一个查询,如果我可以做map [125] .push_back(“DDD”) ;使用map.insert()函数进行操作 – knils 2015-03-23 19:40:08