Если у меня есть вложенная карта в качестве значения для мультикарты, как я могу вставить значения во внутреннюю карту? - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь реализовать словарь, в котором у меня есть внешняя карта (как мультикарта) с ключом, являющимся искомым словом, и значением, являющимся внутренней картой, которая будет иметь несколько пар с разными значениями, которые все могут отображатьк внешнему ключу мультикарты.

например: слово Distinct имеет несколько значений в зависимости от того, является ли оно существительным, глаголом, прилагательным или местоимением ==> существительное - ключевое слово вэта программа наречие - Уникально.Написано «отчетливо» и т. Д.

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

до сих пор я объявил мультикарту следующим образом:

typedef map<string, string> valMap;

multimap<string,valMap> myMultMap;

и я попытался добавить значения с помощью insert() вот так:

myMultMap.insert("Diction", valMap.insert(pair<string,string>("fun", "first Value"));

Я просто изучаю карты и все еще не уверен относительно внутренней работы итераторов в картах.Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Итак, сначала создайте переменную, которую нужно вставить:

valMap tmp;
tmp.insert(make_pair("fun", "first Value"));

Затем вставьте tmp в основную карту:

myMultMap.insert(make_pair("Diction", move(tmp)));
0 голосов
/ 20 октября 2018

multimap::insert возвращает итератор для сохраненной записи.Вы можете использовать этот итератор для вставки элементов во вставленную карту без создания каких-либо временных переменных.Также неплохо использовать emplace пересылку аргументов непосредственно в конструктор ввода вместо insert, чтобы избежать создания временных:

using t_Map = ::std::map<::std::string, ::std::string>;
using t_Multimap = ::std::multimap<::std::string, t_Map>;
t_Multimap multimap{};
auto const p_entry
{
    multimap.emplace
    (
        ::std::piecewise_construct
    ,   ::std::forward_as_tuple("Diction")
    ,   ::std::forward_as_tuple()
    )
};
auto & map{p_entry->second};
map.emplace
(
    ::std::piecewise_construct
,   ::std::forward_as_tuple("fun")
,   ::std::forward_as_tuple("first Value")
);
0 голосов
/ 20 октября 2018

Сначала создайте внутреннюю карту и сохраните ее в переменной.Затем используйте insert, чтобы добавить его на внешнюю карту.

...