【发布时间】:2012-03-10 22:20:05
【问题描述】:
我正在寻找一种有效的方法来修剪或复制现有 std::vector 的子集。元素符合子集/保留条件的标准是它们的索引包含在单独的预定义 std::vector 中。
e.g std::vector<String> Test = { "A", "B", "C", "D", "E"}
std::vector<int> SelectionV = {1,2,5}
Result = {"A", "B", "E"}
我将在一个非常大的向量上执行此操作,并且可能会定期执行此操作,因此我正在寻找尽可能有效的方法。
我也在考虑另一种方法,但又不确定一种有效的方法是......
由于对象 Test 已填充(在我的情况下,它是第 3 方定义的对象),它是使用迭代器单次通过的结果(无法直接访问元素)。我想知道是否可以只添加到出现在 SelectionV 中定义的计数中的 Test 向量元素
例如
int count = 0
for (Iterator.begin, Iterator.end(), Iterator++) {
if (count is a number contained in selectionV)
add to Test
}
但我认为这将导致在每次迭代中通过 selectionV,这比简单地添加所有元素然后选择子集的效率要低得多。
非常感谢任何帮助。
【问题讨论】:
-
selectionV 需要是向量吗?填充测试/结果时它是静态的吗?
-
SelectionV 与 Test 相比有多大? (只有几个元素?几乎所有元素?)
-
No selectionV 不需要是向量。是 测试/结果在填写时是静态的。 SelectionV 可能占 Test 的很大一部分,但这是在运行时定义的,可以是任何百分比,尽管它肯定是至少有 1000 个索引。
标签: c++ performance vector sample subset