2015-03-19 2 views
1

С SQL У меня есть выход:коллекция STL с несколькими значениями для одного ключа

 
id value 
123 xxx 
124 xxx 
124 yyy 
125 xxx 

я обрабатывать этот вывод в C++ коды, где я хочу использовать 123, 125 идентификаторы (уникальные) и 124, которые имеют несколько значения отдельно.

В принципе, я хочу хранить уникальные и многозначные идентификаторы отдельно, а позже хочу их получить отдельно.

Я могу использовать любой контейнер stl.

говорят container1 хранит уникальные значения

 
123 xxx 
125 xxx 

container2

 
124 xxx 
124 yyy 

В карте я могу иметь уникальные пары ключ-значение: (123->xxx), (125->xxx) и 124->xxx,yyy отдельно?

Может ли кто-нибудь помочь мне создать лучший дизайн?

+6

Привет и добро пожаловать к переполнению стека. Я понятия не имею, о чем вы на самом деле спрашиваете. Я подозреваю, что есть больше того, что вы пытаетесь сделать, но на самом деле вы не полностью объяснили все это (просто обзор). Мы не можем помочь, если все, что у нас есть, - это обзор - скажите нам: а) то, что вы ожидаете увидеть (включая примеры данных и примеры); b) что вы наблюдаете вместо этого (включая любые ошибки или журналы); в) соответствующие части кода, который вы пробовали (даже если он был сломан) или, по крайней мере, какого-нибудь псуэдо-кода. d) любые исследования, которые вы сделали по этой теме. Примечание: не отвечайте в комментариях - отредактируйте свой вопрос и добавьте его там. –

+0

Улучшенное форматирование. Уточненный вопрос: это не совсем о sql, на самом деле не имеет значения, откуда берутся эти пары id-value. Вопрос о подходящей коллекции для использования в этом случае. Этот вопрос будет полезен из примера кода и конкретной проблемы. –

+0

См. Std :: multimap: http://www.cplusplus.com/reference/map/multimap/ – CinCout

ответ

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

Привет, aravisdante, спасибо за ответ, есть один запрос, если я могу сделать карту [125] .push_back («DDD») ; с функцией map.insert() – knils

Смежные вопросы