2015-03-19 80 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