Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从列表映射检索时出现问题_C++_Std - Fatal编程技术网

C++ 从列表映射检索时出现问题

C++ 从列表映射检索时出现问题,c++,std,C++,Std,在我的程序中,我有一个带有字符串键和(用户定义类的)值列表的映射,定义如下: std::map<const char*, std::list<Show>> _shows; std::map\u显示; 我有一个添加到特定列表的函数,如下所示: void Add(Show s, const char* index) { list<Show> lshow = _shows[index]; lshow.push_back(s); } void添加(显示s,常量字

在我的程序中,我有一个带有字符串键和(用户定义类的)值列表的映射,定义如下:

std::map<const char*, std::list<Show>> _shows;
std::map\u显示;
我有一个添加到特定列表的函数,如下所示:

void Add(Show s, const char* index) {
list<Show> lshow = _shows[index];
lshow.push_back(s); }
void添加(显示s,常量字符*索引){
列表lshow=_显示[索引];
lshow.push_(s);}
但是,每次使用相同的索引调用函数时,我都会得到一个空列表,而不是返回相同的列表

我做错了什么


ETA:每次调用函数后,字典中的值都会增加。这可能与[]运算符有关吗?

您需要使用引用:

list<Show>& lshow = _shows[index];
list&lshow=_显示[索引];
否则,您将创建一个临时副本并添加到其中

您会看到地图中的项目数量增加,因为您每次都在搜索不同的指针,即使它指向相同的值。如果您使用的是
操作符[]
,则此操作失败时会添加一个空值


您需要比较实际值(通过定义传递给映射构造函数的比较器),或者使用
std::string
s作为键。

当您编写
list lshow=\u显示[index]
时,您实际上是在复制映射中找到的列表。您需要的是此列表上的引用:
list&lshow=\u显示[索引]
您正在使用常量字符*作为std::map键。映射按指针地址排序,而不是按指向的字符串排序。要获得您想要的行为,请使用:

std::map<std::string,std::list<Show> >
std::map

地图中的键是指针值,而不是其内容。因此行为怪异。更改映射,使其键为
std::string
。此外,还可以修改存储列表的副本。要避免这种情况,请使用引用

list<Show>& ls = map[index]
list&ls=map[索引]

lshow
\u shows[index]
的副本。尝试
\u显示[索引]。向后推
,或者将
\u显示[索引]
作为参考:

list<Show>& lshow = _shows[index];
std::list&lshow=_显示[索引];
lshow.向后推_(s);

也考虑重命名<代码>显示,因为从下划线开始的名称通常保留在标准库中。

并且确保您正在编辑存储在地图中的列表,而不是每个人所说的副本。