C ++映射值作为列表,在列表中添加和删除元素

时间:2019-08-08 02:44:50

标签: c++ list dictionary

我有一个unordered_map,键为字符串,值为字符串列表。我能够弄清楚如何向列表中添加元素(这是无序映射中特定键的值)。我不知道如何从同一列表中删除元素。

代码的关键部分是:

Matrix基本是模仿一对src和dest。我试图在哪里组织它以映射其中key是唯一的src,并且dest收集在值列表中。

例如:[[A,B],[A,c]]-> {A:[B,C]}

vector<vector<string>>& matrix; 
unordered_map<string, list<string>> um;

for (vector<string> mat: matrix) {
  src = mat[0];
  dst = mat[1];

  if (um.find(src) == um.end()) {
    um[src] = list<string>();
  }
  um[src].push_back(dst);
}

上面的代码似乎可以正常工作

要删除这就是我正在做的事情

无序地图可以是这样的

{
A:[B,C],
C: [B],
B: [A,C]
}

以下代码段的逻辑是从A开始,从列表中弹出B作为键A的值。使用从A的值列表中弹出的B,并找到键B的值列表,并从中弹出第一个元素它。碰巧是A。因此,现在使用A作为键来找到其值列表并弹出下一个未弹出的元素C,但令我惊讶的是,尽管我尝试在键A仍在其中时从键列表中弹出B。 Map本质上是一个循环图的邻接矩阵,在这里我试图一个一个地删除/删除边缘,但是我的问题是这里的语法/代码所特有的。

string starting_src_key = "A";
string temp_str;
list<string> &templ = um[starting_src_key];
while(!templ.empty()) {
   temp_str = templ.front();
   cout << "\n" << temp_str;
   templ.pop_front();
   templ = um[temp_res];
}

我尝试了各种操作,例如将变量&templ替换为templ(没有&的变量),但也没有用。

我是C ++的新手,因此尝试了解一些有关map和list的信息。

1 个答案:

答案 0 :(得分:1)

您无法重新放置参考,因此templ = um[temp_res];并没有达到您的期望。改用指针。

list<string> * templ = & um[starting_src_key];
while(!templ -> empty()) {
   temp_str = templ -> front();
   cout << "\n" << temp_str;
   templ -> pop_front();
   templ = & um[temp_res];
}