2015-07-22 2 views
1

У меня есть многомерная карта. Позволяет сказать:C + + многомерная карта: Как получить «внутренние» карты?

std::map<std::string, 
    std::map<std::string, 
     std::map<std::string, std::list<std::string>>>> my_map; 

Мой вопрос: Что такое правильный способ, чтобы получить доступ к «внутренним» картам (на объектах)? Я не говорю о ценностях. Я знаю, к ним можно обратиться через

my_map["key1"]["key2"].... 

Я имею в виду, например, размер. Как получить размер второй карты. Является ли это правильный способ сделать это ?:

my_map.begin()->second.size() 

ответ

4

Что такое правильный способ, чтобы получить доступ к «внутренним» карты?

Нет внутренняя карта. Есть лотов внутренних карт. m_map["key1"] - одна внутренняя карта, m_map["key2"] - другая внутренняя карта. Для каждого ключа на внешней карте есть новая внутренняя карта. Эти карты не связаны друг с другом - они имеют один и тот же тип, вот и все.

my_map.begin()->second.size() напечатает размер внутренней карты, соответствующей клавише первым, таким же образом, что m_map["key1"].size() напечатает размер внутренней карты, соответствующей "key1".

+0

Спасибо за быстрый ответ, но, пожалуйста, обратите внимание, что я использовал множественное число в моем вопросе. Тем не менее, хорошо указать на это, чтобы это стало понятным для любого другого. Я также принимаю это, что 'my_map.begin() -> second.size()' - правильный способ сделать это, если я не знаю ключей. – kiigass

+0

@kiigass Это правильный способ сделать * what *? Вы не можете получить размер * * второй карты, нет ни одного из них. Да, это * * способ получить размер одной из карт. – Barry

0

Если вы уверены, что внутренний map существует, или вы намерены создать его, вы можете сделать:

my_map["key1"].size(); 

Или для большинства интерьер map:

my_map["key1"]["key2"].size(); 

Если вы Дон» t знаете, если у вас есть интерьер map и вы не хотите его создать, вам нужно будет использовать find:

const auto it = my_map.find("key1"); 
const auto size = it = my_map.end() ? 0 : it->size(); 

Для самого внутреннего map, который был бы:

const auto it = my_map["key1"].find("key1"); 
const auto size = it = my_map["key1"].end() ? 0 : it->size(); 
Смежные вопросы