相关疑难解决方法(0)

如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?

如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?

例如,假设我有两个相同大小的向量:

vector<MyObject> vectorA;
vector<int> vectorB;
Run Code Online (Sandbox Code Playgroud)

然后我vectorA使用一些比较函数排序.排序重新排序vectorA.如何应用相同的重新排序vectorB


一种选择是创建一个结构:

struct ExampleStruct {
    MyObject mo;
    int i;
};
Run Code Online (Sandbox Code Playgroud)

然后对包含内容vectorA并将其vectorB压缩为单个向量的向量进行排序:

// vectorC[i] is vectorA[i] and vectorB[i] combined
vector<ExampleStruct> vectorC;
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个理想的解决方案.还有其他选择,特别是在C++ 11中吗?

c++ c++11

74
推荐指数
3
解决办法
2万
查看次数

使用索引向量重新排序向量

我想重新排序向量中的项目,使用另一个向量来指定顺序:

char   A[]     = { 'a', 'b', 'c' };
size_t ORDER[] = { 1, 0, 2 };

vector<char>   vA(A, A + sizeof(A) / sizeof(*A));
vector<size_t> vOrder(ORDER, ORDER + sizeof(ORDER) / sizeof(*ORDER));

reorder_naive(vA, vOrder);
// A is now { 'b', 'a', 'c' }
Run Code Online (Sandbox Code Playgroud)

以下是一个低效的实现,需要复制向量:

void reorder_naive(vector<char>& vA, const vector<size_t>& vOrder)  
{   
    assert(vA.size() == vOrder.size());  
    vector vCopy = vA; // Can we avoid this?  
    for(int i = 0; i < vOrder.size(); ++i)  
        vA[i] = vCopy[ vOrder[i] ];  
}  
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法,例如,使用swap()?

c++ stl vector

34
推荐指数
3
解决办法
2万
查看次数

如何在排序后获得索引排列

给定一个数组arr = {5, 16, 4, 7},我们可以对其进行排序sort(arr, arr+sizeof(arr)/sizeof(arr[0])).所以现在数组arr = {4, 5, 7, 16}和排序数组的排列索引是{2, 0, 3, 1}.换句话说,arr[2]原始数组中的现在是排序数组中最小的元素0.

有没有一种有效的方法可以获得排列指数?

谢谢

c++ algorithm

28
推荐指数
2
解决办法
1万
查看次数

排序两个相应的数组

我这里的代码有两个数组.它对arr []进行排序,因此最高值将在索引0中.现在第二个数组arr1 []包含字符串,我希望代码将arr []所做的任何更改应用于arr1 [].因此arr [0]将返回6,而arr1 [0]将返回字符串"d1".请注意"d1"6的索引是否相同?排序后我想要相同的值仍然有他们的字符串对应物.

我该怎么做呢?

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <functional>
using namespace std;

int main() {
  int arr[ 5 ] = { 4, 1, 3, 6, 2 };  
  string arr1[ 5 ] = { "a1", "b1", "c1", "d1", "e1" };

  std::sort( arr, arr + 5, std::greater< int >() );
  cout << arr[0] << arr1[0] << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays

23
推荐指数
3
解决办法
2万
查看次数

C++ STL:根据另一个的内容自定义排序一个向量

这可能是最好的例子.我有两个向量/列表:

People = {Anne, Bob, Charlie, Douglas}
Ages   = {23, 28, 25, 21}
Run Code Online (Sandbox Code Playgroud)

我想根据他们的年龄使用类似的东西来对人们进行排序sort(People.begin(), People.end(), CustomComparator),但我不知道如何编写CustomComparator以查看Ages而不是People.

c++ sorting stl

18
推荐指数
3
解决办法
2万
查看次数

C++,基于另一个排序一个向量

我得到的最好的例子是我想根据他们的分数对名字进行排序.

vector <string> Names {"Karl", "Martin", "Paul", "Jennie"};
vector <int> Score{45, 5, 14, 24};
Run Code Online (Sandbox Code Playgroud)

因此,如果我将分数排序为{5,14,24,45},则还应根据分数对名称进行排序.

c++ sorting vector

10
推荐指数
5
解决办法
5335
查看次数

排序一对向量

我知道如何对一对矢量进行排序,但是你如何对一对矢量进行排序?我可以考虑在一对向量上编写一个自定义的"虚拟"迭代器并对其进行排序,但这看起来非常复杂.有没有更简单的方法?C++ 03中有一个吗?我想用std::sort.

当处理在硬件中生成的一些数据时出现这个问题,其中一对数组比对数组更有意义(从那时起会出现各种步幅和对齐问题).我意识到,否则保持一对向量而不是对的向量将是一个设计缺陷(数组问题的结构).我正在寻找一个快速的解决方案,将数据复制到成对的向量然后返回(我将它返回到HW以进行更多处理)不是一个选项.

例:

keys   = {5, 2, 3, 1, 4}
values = {a, b, d, e, c}
Run Code Online (Sandbox Code Playgroud)

排序后(通过第一个向量):

keys   = {1, 2, 3, 4, 5}
values = {e, b, d, c, a}
Run Code Online (Sandbox Code Playgroud)

我将"一对矢量"称为一对keysvalues(存储为例如std::pair<std::vector<size_t>, std::vector<double> >).矢量具有相同的长度.

c++ sorting vector

8
推荐指数
1
解决办法
958
查看次数

使用另一个向量中的值对矢量进行排序

我有一个包含类的对象的std::vector调用.假设有一个成员变量,我还实现了一个返回最小值和的函数.然后,我可以根据对象的值来做矢量.foo_vecFooFooint xCompareInts(int a, int b)abstd::sortx

但是,如果这些x值不是成员变量Foo,而是在另一个std::vector名称中,那该怎么办呢x_vec?这里,第一个元素x_vec对应于第一个元素foo_vec,依此类推.如何根据相应的值执行std::sort打开?foo_vecx_vec

c++

8
推荐指数
1
解决办法
1196
查看次数

C++ Parallel std :: vector使用昂贵的复制进行排序

假设我有一个vector<int> intVec和一个vector<vector<double> > matrix.我想在C++中intVecmatrix相应的第一个维度进行排序和重新排序.我之前已经多次问过这个问题,但是这个案子有一个转折点.一个vector<double>是复制昂贵,因此如复制都intVecmatrix一个vector<pair<int, vector<double> >,分选和复制他们回到甚至比平常更加低效.

intVec除了滚动我自己的自定义排序算法之外,如何matrix不复制任何元素matrix和调用vector复制构造函数的情况下对锁步的第一维进行排序和重新排序?

c++ sorting algorithm stl

5
推荐指数
1
解决办法
1767
查看次数

将一个向量相对于另一个向量排序 - 最有效的方法?

我知道这个问题已经 被问 了好 几次,但是对于简单的情况(紧凑性,可读性或用户熟练程度是决定因素)提供了不同的答案,我不确定哪一个是最有效的,因为我担心重复该操作O(1M)次.

设置如下:

  • 两个向量ABfloat的; 这不能改变,但可以从A和创建其他结构B.
  • A并且B长度相等,至少为4,最多为20(如果这对任何方式都有帮助).
  • A需要根据其条目的值按降序排序,而B只需要匹配A的顺序.

例:

A = {2,4,3,1} -> {4,3,2,1}
     | | | |
B = {1,2,3,4} -> {2,3,1,4}
Run Code Online (Sandbox Code Playgroud)

题:

这样做最有效(快速+节省内存)的方法是什么?

c++ sorting performance vector

1
推荐指数
1
解决办法
248
查看次数

标签 统计

c++ ×10

sorting ×5

vector ×4

stl ×3

algorithm ×2

arrays ×1

c++11 ×1

performance ×1