如何按其他std :: vector的值对std :: vector进行排序?

我有几个std::vector,长度都一样。我想对这些向量之一进行排序,并将相同的变换应用于所有其他向量。有一个整齐的方法吗?(最好使用STL或Boost)?一些载体的持有intS和他们中的一些std::string秒。


伪代码:


std::vector<int> Index = { 3, 1, 2 };

std::vector<std::string> Values = { "Third", "First", "Second" };


Transformation = sort(Index);

Index is now { 1, 2, 3};


... magic happens as Transformation is applied to Values ...

Values are now { "First", "Second", "Third" };


眼眸繁星
浏览 1693回答 4
4回答

qq_笑_17

将值放入Boost Multi-Index容器中,然后进行迭代以按所需顺序读取值。如果需要,您甚至可以将它们复制到另一个向量。

炎炎设计

您可能可以定义一个自定义的“外观”迭代器,该迭代器可以满足您的需求。它将迭代器存储到所有向量,或者从第一个向量的偏移量导出除第一个向量以外的所有向量的迭代器。棘手的部分是迭代器取消引用的内容:想像boost :: tuple之类的东西,并巧妙地使用boost :: tie。(如果您想扩展这个想法,可以使用模板递归地构建这些迭代器类型,但您可能永远不想写下它的类型-因此,您需要c ++ 0x auto或包装函数来进行取范围的排序)
打开App,查看更多内容
随时随地看视频慕课网APP