[英]Can't get the right answer with c++ STL map
我写了一个小的地图测试程序,如下所示:
void main()
{
vector<double> price;
vector<string> time;
price.push_back(5.70);
price.push_back(5.77);
price.push_back(5.81);
price.push_back(5.72);
price.push_back(5.81);
time.push_back("10:40");
time.push_back("10:43");
time.push_back("10:44");
time.push_back("10:46");
time.push_back("10:48");
map<double,string> myMap;
for (int i=0 ; i<price.size() ; i++)
{ myMap[price[i]] = time[i]; }
for (int i=0 ; i<price.size() ; i++)
{
if (price[i] == 5.81)
{ cout << myMap[price[i]] << endl; }
}
}
我的预期输出应为:
10:44
10:48
但是我得到的输出是:
10:48
10:48
我不知道为什么这是错的。
myMap
每个键只能存储一个值:键5.81被复制。
您随后插入5.81->“ 10.48”时将覆盖值“ 10:44”。
如果要为单个键重复值,请使用std::multimap
。
(此外,请注意将浮点类型用作键。浮点比较会遇到问题。)
在第一个周期的最后一次迭代中,您正在更新myMap [5.81],之前已在上面添加了2次迭代(不添加新元素)。 考虑使用std :: multimap
从文档中
映射是关联的容器,它按照特定顺序存储由键值和映射值的组合形成的元素。
在地图中,键值通常用于对元素进行排序和唯一标识,而映射值存储与该键关联的内容。
因此每个键只能有一个值,这就是为什么它两次打印相同值的原因。
另外,您可以替换代码的以下部分:
for (int i=0 ; i<price.size() ; i++)
{
if (price[i] == 5.81)
{ cout << myMap[price[i]] << endl; }
}
// by
cout << myMap[5.81] << endl;
如果您不考虑double
问题,则大致相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.