【发布时间】:2021-03-07 17:20:33
【问题描述】:
我需要按索引对 std::vector 进行排序。让我用一个例子来解释一下:
假设我有一个包含 12 个位置(但可以是 18 个)的 std::vector,其中填充了一些值(不必排序):
Vector Index: 0 1 2 3 4 5 6 7 8 9 10 11
Vector Values: 3 0 2 3 2 0 1 2 2 4 5 3
我想每 3 个索引对其进行排序。这意味着:前 3 个 [0-2] 留下,然后我需要有 [6-8],然后是其他人。所以最终会是这样(新索引 3 的值是之前的 idx 6):
Vector Index: 0 1 2 3 4 5 6 7 8 9 10 11
Vector Values: 3 0 2 1 2 2 3 2 0 4 5 3
我正在尝试使用 std::sort + lambda 在一行中完成它,但我无法得到它。还发现了std::partition()函数并尝试使用,结果真的很糟糕嘿嘿
还发现了这个类似的问题,它按奇数和偶数索引排序,但不知道如何在我的情况下或即使有可能:Sort vector by even and odd index
非常感谢!
注意 0:不,我的向量并不总是排序的。这只是一个例子。我已经更改了值
注 1:我知道这听起来很奇怪......认为它就像 hte vecotr 位置一样:是 是 是 不 不 不 是 是 是 不 不 不 是 是 是...所以“是”的位置会出现相同的顺序,但在“否”位置之前
注意 2:如果 lambda 没有办法,那么我想用循环和辅助变量来制作它,但我认为它更难看。
注3:另一个例子:
Vector Index: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Vector Values: 3 0 2 3 2 0 1 2 2 4 5 3 2 3 0 0 2 1
Sorted Values: 3 0 2 1 2 2 2 3 0 3 2 0 4 5 3 0 2 1
最终的向量值被排序(根据旧索引):0 1 2 6 7 8 12 13 14 3 4 5 9 10 11 15 16 17
您可以将这些索引想象成 2 列,所以我想要第一个左侧的,然后是右侧的:
0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17
【问题讨论】:
-
我不明白你到底想做什么。结果向量似乎没有以任何方式排序。您是否想根据索引移动元素?
-
你检查过这个话题吗? stackoverflow.com/questions/1577475/…
-
@AlirezaAbbasi 是的,也找到了,但他们再次使用元素进行排序,而不是索引......我真正需要的是对索引进行排序。但是非常感谢您提供的信息:)
-
@cigien 是的,我知道这有点棘手。索引将被排序为:是的,是的,没有的,没有的,是的,是的,没有的,没有的,所以“是”将比“否”的索引排在前面。也许现在更清楚了?
-
你的原始向量总是排序的吗?如果是这样,提供的答案解决了问题,但如果原始向量没有排序,它将不起作用。你能澄清一下这个问题吗?
标签: c++ sorting vector std stdvector