Хэш-карта (int, string[]) в C++

Может ли кто-нибудь сказать мне код для начала работы с Hashmap на С++ для следующего случая:

Я хочу иметь сопоставление (ключ, значение) для (int, string []).

Итак, моя карта должна иметь ключ int, указывающий на массив строк некоторого размера. Как мне объявить и использовать хэш-карту для этого в С++.

Пожалуйста, помогите мне с этим. заранее спасибо


person vamosrafa    schedule 19.04.2012    source источник
comment
Или std::tr1::array вместо std::vector, чего бы это ни стоило.   -  person Benjamin Bannier    schedule 19.04.2012


Ответы (1)


Вы можете использовать std::map std::unordered_map из std::vectors из std::strings, но unordered_multimap представляет лучший вариант на C++. Он позволяет хранить несколько элементов для одного и того же ключа без управления векторами внутри каждой записи карты.

Вот пример использования карты:

using namespace std;

int main(int argc, const char* argv[]) {
    unordered_map<int,vector<string>> mvs;
    vector<string> items1;
    items1.push_back("hello");
    items1.push_back("world");
    vector<string> items2;
    items2.push_back("quick");
    items2.push_back("brown");
    items2.push_back("fox");
    mvs[1] = items1;
    mvs[200] = items2;
    mvs[4].push_back("another_one");
    for(unordered_map<int,vector<string>>::const_iterator iter = mvs.begin() ; iter != mvs.end() ; iter++) {
        cout << iter->first << ":";
        for (vector<string>::const_iterator jter = iter->second.begin() ; jter != iter->second.end() ; jter++) {
            cout << *jter << " ";
        }
        cout << endl;
    }
    return 0;
}

Отредактировано для упоминания хэш-карты.

person Sergey Kalinichenko    schedule 19.04.2012
comment
Ни одна из них не является хэш-картой - person juanchopanza; 19.04.2012
comment
@juanchopanza К сожалению, я пропустил часть вопроса о хэш-карте. Я не уверен на 100%, что это необходимо, хотя: вложенные структуры, подобные этой, часто используются в языках, где в библиотеках классов отсутствуют мультикарты. - person Sergey Kalinichenko; 19.04.2012
comment
Также есть std::unordered_multimap - person bames53; 19.04.2012
comment
@bames53 Исправлено, спасибо. Это было введено после того, как я закончил создавать вещи на C++ (что произошло около девяти лет назад), так что я довольно ржавый. Спасибо еще раз! - person Sergey Kalinichenko; 19.04.2012
comment
@ user356186 Я добавил пример использования карты для добавления векторов и отдельных элементов. Пожалуйста, взгляните. - person Sergey Kalinichenko; 20.04.2012