有没有简单的方法来查找预分配向量的非空条目的索引?
一种方法是简单地遍历向量。但是如果分配给vector的内存很大而且非空条目的数量非常少,那么它会非常慢
下面是示例代码。我有索引5,9,9,15
的条目,现在的任务是从大小为indices
的向量x中识别20
5,9,15。请建议一些简单的方法,甚至更好的数据结构,这将有所帮助。
#include "stdafx.h"
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector <map<int,int>> x(20);
x[5].insert({ 4,10002 });
x[9].insert({2,20});
x[9].insert({ 3, 60 });
x[15].insert({ 11, 60 });
return 0;
}
答案 0 :(得分:0)
首先,我假设零条目是指空条目(没有元素的map
)。
我认为不可能删除迭代成本,但可以将其从您想要识别这些索引的位置移动到程序的其他点(初始化,元素插入......)。 p>
例如,您可以在一个类中封装两个容器:您建议的向量,以及带有向量中空条目索引的set<size_t>
。两者都不应该在课堂外直接访问(private
)。您必须使用范围向量中的所有索引初始化集合(此处迭代)。应该通过类接口插入新元素以从集合中删除该索引。也删除了新元素(包括从任何条目的映射中删除元素,以检测它何时为空)。为了识别空条目索引,你可以在集合中拥有所有条目。
正如您所看到的,此方法将迭代成本从您想要识别空条目索引的点移动到初始化,从而将复杂性(和成本)添加到其他任何位置。
根据您的需要,使用的容器可能不同,或者这种方法可能根本没用。
更新:如果问题是查找空条目索引,则上述方法是正确的。要解决问题中的问题(识别非空入口索引),方法是:
set<size_t>
存储非空索引