Произвольный доступ в значении мультикарты, или я должен просто использовать карту вектора - PullRequest
0 голосов
/ 05 августа 2011

Мне было интересно, есть ли способ выполнить произвольный доступ к значениям мультикарты.

#include <map>
#include <vector>
#include <string>

int main() {
    std::map<std::string, std::vector<std::string>> m0;

    m0["Food"].push_back("Ice Cream");
    m0["Food"].push_back("Pizza");

    // Random access to Pizza. Nice!
    printf ("2nd Food is %s\n", m0["Food"][1].c_str());

    std::multimap<std::string, std::string> m1;
    m1.insert(std::pair<std::string, std::string>("Food", "Ice Cream"));
    m1.insert(std::pair<std::string, std::string>("Food", "Pizza"));

    // Is there any way to perform random access in multimap?
    std::multimap<std::string, std::string>::const_iterator find = m1.find("Food");

    // Sequential access to Pizza. Bad :(
    // I wish to have something
    // printf ("2nd Food is %s\n", find[1].c_str());
    find++;
    printf ("2nd Food is %s\n", find->second.c_str());

    getchar();
}

Поскольку одним из требований является произвольный доступ к значениям карты, лучше ли использовать векторную карту?

1 Ответ

2 голосов
/ 05 августа 2011
Итераторы

std::multimap<> являются строго двунаправленными (§23.3.2 / 1), поэтому нет, произвольный доступ между значениями с одинаковым ключом невозможен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...