映射写入失败:无法覆盖第一个元素
Map inserstion failure: can not overwrite first element?
static std::map <unsigned int, CPCSteps> bestKvariables;
inline void copyKBestVar(MaxMinVarMap& vMaxMinAll, size_t& K, std::vector<unsigned int>& temp)
{
// copy top k variables and store in a vector.
MaxMinVarMap::reverse_iterator iter1;
size_t count;
for (iter1 = vMaxMinAll.rbegin(), count = 0; iter1 != vMaxMinAll.rend()&& count <= K; ++iter1, ++count)
{
temp.push_back(iter1->second);
}
}
void myAlgo::phase1(unsigned int& vTarget)
{
CPCSteps KBestForT; // To store kbest variables for only target variable finally put in a global storage
KBestForT.reserve(numVars);
std::vector<unsigned int> tempKbest;
tempKbest.reserve(numVars);
.......
.......
copyKBestVar(mapMinAssoc, KBestSize, tempKbest); // Store k top variables as a k best for this CPC variable for each step
KBestForT.push_back(tempKbest);
.....
.....
bestKvariables.insert(make_pair(vTarget, KBestForT)); // Store k best in a Map
.....
....
}
问题:映射"bestKvariables"不会覆盖第一个元素,而是不断更新其余元素。我试图调试它,但我发现的问题出在插入命令中。
提前感谢您的帮助。
另一个问题:我是否可以在开始时保留地图的大小(如vector.reserve(..((以避免插入成本。
很抱歉提供的信息不足。
我的意思是如果有四个 vTarget 变量 1、2、3、4。我为每个变量做一些统计计算。这些变量有多个迭代,我想将每个变量的前 k 个结果存储在地图中,以便在下一次迭代中使用。
我看到第一个插入的变量(带有键无符号整数"vTarget"(在进一步迭代时没有更新(它仍然是第一次迭代时插入的值(。但其他变量(在第一个变量之后插入的键(将保持更新。
另一个问题:我是否可以在开始时保留地图的大小(如vector.reserve(..((以避免插入成本。
与std::vector
不同,std::map
没有reserve()
功能。
通常,标准库为容器提供函数,这些函数提供并确保良好的性能或提供实现相同性能的方法。
对于像std::vector
这样的容器,重新分配其存储可能非常昂贵操作。对push_back()
的简单调用可能导致将std::vector
中的每个元素复制到新分配的内存块中。对reserve()
的调用可以避免这些不必要的分配和std::vector
的复制操作,因此为其提供了相同的操作。
std::map
永远不需要仅仅因为插入或删除了新元素而复制所有现有/剩余元素。因此,它不提供任何此类功能。
虽然该标准没有指定如何实现std::map
,但预期的行为和所需的复杂性确保大多数实现将其实现为tree
,不像std::vector
需要在连续的内存位置分配元素。
map::insert
不应该更新/覆盖任何内容,只需插入尚不存在的元素即可。使用 operator[]
进行更新,它还会在指定的键尚不存在时插入元素。
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 为什么第一个Dynamic_cast没有投射到基类?
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 为什么我的代码在第一个 if 语句处中断?
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 无法使我的第一个Windows OpenGL窗口抬起并运行
- 将参数初始化为构造函数,而不是第一个
- 无法在硬件模式下创建 SGX 安全区 - "invalid launch token"即使文档将无效的启动令牌指定为第一个