如果我有一个嵌套地图作为多图的值,如何将值插入内部图?

时间:2018-10-20 12:06:07

标签: c++ c++11 dictionary multimap

我正在尝试实现一个字典,其中我有一个外部地图(作为多图),其关键字是要搜索的单词,值是内部地图,该地图本身将具有几对具有不同值的值,所有这些值都可以映射到外部多重地图键。

例如:单词 Distinct 具有多种含义,具体取决于其名词,动词,形容词还是代词==> 名词 < em>-该程序中的关键字 副词-唯一。书面地“

我正在考虑将单词 Distinct 作为 key 映射到外部多图,并将词性作为关键映射到内部图,并将定义作为内部地图的值。

到目前为止,我已将多重地图声明为:

typedef map<string, string> valMap;

multimap<string,valMap> myMultMap;

并且我尝试使用 insert()这样添加值:

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

我只是在学习地图,仍然不确定地图中迭代器的内部工作方式。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

首先,创建内部映射并将其存储到变量中。然后使用insert将其添加到外部地图中。

答案 1 :(得分:0)

因此,首先创建您需要插入的变量:

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

然后将此tmp插入主地图:

myMultMap.insert(make_pair("Diction", move(tmp)));

答案 2 :(得分:0)

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")
);