【发布时间】:2012-10-17 09:17:15
【问题描述】:
我的程序中有一个存储成对值的 std::map。我希望地图中的键是唯一的——这是 std::map 类的预期行为。但是当我将这些对插入其中时,会重复一些键。我该如何解决这个问题?
我的代码如下:
map<float,vector<float> *> inpDataMap;
inpDataMap.clear();
for(int i = 0; i < input.getNum(); i++)
{
float xVal = input[i][0];
float yVal = input[i][1];
if(inpDataMap.count(xVal) > 0)
{
myfile << i << " repeated xval: " << xVal << " : " << yVal << endl;
inpDataMap[xVal]->push_back(yVal);
myfile << "repeated value pushed" << endl;
}
else
{
vector<float> *inVec = new vector<float>;
inVec->push_back(yVal);
inpDataMap[xVal] = inVec;
myfile << i << " not repeated:" << xVal << ":" << yVal << endl;
}
}
如您所见,我这里的地图实际上是一个浮点数和相关浮点数向量的关联。如果已经存在一个键,则将该值添加到与该键对应的向量中。但就像我说的,密钥不是唯一存储的。谁能帮我解决这个问题?
拉克什。
【问题讨论】:
-
你怎么知道键不是唯一的?
-
这是不真实的,该地图包含重复的键。请举例。
-
这是标准行为。您有责任确保不向
std::map添加重复条目,如果您需要重复的键条目,请使用std::multimap。 -
问题不在于地图,而在于您的输入。地图可以很好地存储唯一键。
-
根据定义,键在 std::map 中是唯一的。你自己说这个。然后你说实际上它们并不是唯一的。恐怕你的问题对我来说毫无意义。
标签: c++ map c++-standard-library