Контейнер для строки и int для сопоставления и подсчета? - PullRequest
0 голосов
/ 07 августа 2011

В C ++, что было бы самым простым способом создать временный контейнер для хранения строки и int, как словарь C #, где я могу легко сопоставить строковый ключ с другой строкой и увеличить или уменьшить значение записи int?

Содержимое контейнера будет происходить из строки, где каждое слово, разделенное пробелом, является ключевой записью, а все значения каждого ключа начинаются с 0.

Dictionary<string, int> Options = new Dictionary<string, int>();
Options.Add("xyz", 0);
Options.Add("abc", 0);
Options.Add("dfg", 0);

Тогда я должен сравнить его с пользовательской опцией, что-то вроде:

if (Options.ContainsKey(user_opt))
    Options[user_opt]++;

Сначала я что-то пробовал с векторами , но поскольку мои знания в C ++ едва ли 0, я в основном застрял в этом.

С векторами вот что я получил:

vector<string> Options;
boost::split(Options, m_StartMode, boost::is_any_of(" "));

Ответы [ 2 ]

5 голосов
/ 07 августа 2011

Используйте std::map или std::unordered_map для хранения ключа, значения.

std::map<std::string, int> Options;
Options.insert(std::make_pair("xyz", 0));
Options.insert(std::make_pair("abc", 1));

Затем используйте map::find, чтобы проверить, существует ли ключ:

std::map<std::string,int>::iterator iter;
iter = Options.find(user_opt);

if(iter != Options.end())
   iter->second++;
2 голосов
/ 07 августа 2011

Взгляните на std::map.

...