我应该用吗?
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
Run Code Online (Sandbox Code Playgroud)
要么
std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators
Run Code Online (Sandbox Code Playgroud)
按降序对矢量进行排序?一种方法或另一种方法有任何好处或缺点吗?
如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?
例如,假设我有两个相同大小的向量:
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中吗?
我有一个vector<data> info地方data被定义为:
struct data{
string word;
int number;
};
Run Code Online (Sandbox Code Playgroud)
我需要info按字符串的长度排序.有一种快速简单的方法吗?
我有
vector<vector<int>> vec
Run Code Online (Sandbox Code Playgroud)
在我的c ++应用程序中.
每个作为"大"向量元素的整数向量都有4个INT值.我想基于它的内容向量(我的意思是每个"内部"向量第三元素)的第三个值对vec进行排序 - 是否可能?
编辑
假设我有一个功能
COST(vector<int>)
Run Code Online (Sandbox Code Playgroud)
根据我的矢量值计算出一些值 - 我可以在比较参数中使用它吗?它会帮助我更多.
我声明了一个向量如下:vector<unique_ptr<Worker>> Workers.Worker是一个带有私有字段的基类,name它有两个派生类:Builder和Driver.
我添加到Workers的矢量对象Builder和Driver,然后我想在矢量排序,name使用#include <algorithm>这样的:
sort(Workers.begin(), Workers.end(), cmp_by_name);
bool cmp_by_name(const Worker &a, const Worker &b)
{
return a.getName() < b.getName();
}
Run Code Online (Sandbox Code Playgroud)
但VS编译器说:
错误1错误C2664:'bool(const Worker&,const Worker&)':无法将参数2从'std :: unique_ptr>'转换为'const Worker&'c:\ program files(x86)\ microsoft visual studio 12.0\vc\include\algorithm 3071 1 App
我该如何解决这个错误?
感谢@NathanOliver,@ Rabbid76和这个问题,我把我编辑cmp_by_name成这个表格:
struct cmp_by_name
{
inline bool operator()(const unique_ptr<Worker>& a, const unique_ptr<Worker>& b)
{
return a->getName() < b->getName();
} …Run Code Online (Sandbox Code Playgroud) 我有一个std::vector<Word> data不在下面的结构:
struct Word
{
std::string word;
int line_number;
};
Run Code Online (Sandbox Code Playgroud)
我已经从文件中读取了单词并将其推入到我的向量中,该向量存储了上面字符串中的单词以及单词出现的行号.现在我需要按字母顺序对单词进行排序,并尝试以下方法:
std::sort(data.begin(), data.end());
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译以下内容时,我会得到一个疯狂的错误列表.我相信这是由于sort算法试图将vector.begin()与vector.end()进行比较,但它不知道如何将struct word计算为另一个struct word.
但是我也没有.我对如何比较包含在向量中的结构的字符串感到困惑.
我有一个矢量bitsets:
vector < bitset<1024> > myvector;
Run Code Online (Sandbox Code Playgroud)
从这个向量排序的最佳方法是什么:
0:xxx0100
1:xxx1100
2:xxx0010
3:xxx0001
...
...
这个订单:
0:xxx0001
1:xxx0010
2:xxx0100
3:xxx1100
...
...
我已经尝试用std:sort来做这个,但它不起作用,因为std:sort使用"<" - 运算符,这对于bitsets不起作用.
在此先感谢您的帮助!任何建议或想法都非常感谢!
编辑:
我的问题不同于排序自定义对象的向量,因为不可能使用"<" - 运算符bitset.所以我的问题是,我可以使用哪个运算符进行比较bitset?
首先,我想说这是我在stackOverflow上问的第一个问题,所以如果我不够清楚,我深表歉意。
我的问题是关于以参数方式引用函数内的结构特征。我在 C++ 中工作。
我真正想要实现的是能够根据作为参数给出的特定结构特征对结构对象(或类对象)的向量进行排序。 我还想通过模板提供结构的类型,因此一些处理特定情况的解决方法通常可能不起作用。
我将展示一个简单的例子来说明我的意思。
比方说,我有一个名为“human”的结构,具有以下特征:“年龄”、“身高”、“体重”。
我们还假设我有一个称为“人类”的“人类”对象向量。
在这里,假设我想创建一个函数,根据我作为参数传递的内容,可以将每个元素的年龄、高度或体重输出到屏幕上。
下面的代码显然不起作用。我要求正确的方法来做到这一点。
struct human{
int age;
int height;
int weight;
};
void show(vector<human> &elements, int value){
for (int i=0; i<elements.size(); i++)
cout << elements[i].value << endl;
}
int main{
...
vector<human> mankind;
...
show(mankind, age);
show(mankind, height);
show(mankind, weight);
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想指出,这个例子是一个非常简单的案例。当然,如果我为每个特征创建单独的函数,或者如果我使用一种厚颜无耻的方式,比如传递一个字符串“年龄”或“身高”或“体重”作为参数,在函数内部检查它并有每个人都有一个完全独立的案例。
但是,此类解决方法在问题的一般情况下不起作用,尤其是当我有许多不同类型的结构(通过 atemplate T和vector< T >)和功能时。
如果我想通过它所拥有的两种变量之一对UDT的向量进行排序,标准库排序是否可以执行此操作,或者我是否需要编写自己的排序函数.
例如,如果你有
struct MyType{
int a;
int b;
};
vector<MyType> moo;
// do stuff that pushes data back into moo
sort(moo.begin(), moo.end()) // but sort it by lowest to highest for a, not b
Run Code Online (Sandbox Code Playgroud)
那么这可能使用stdlib排序吗?谢谢.
我重载了我的类' ()运算符以将其用作排序比较器函数.当使用std :: sort()时,它由于某种原因多次调用类的析构函数(显然取决于向量中的条目数量).我在~RANK()中描述了更多.
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
class RANK
{
struct COMBO
{
int x;
};
std::vector<COMBO *> data;
public:
RANK()
{
printf("RANK()\n");
}
~RANK()
{
printf("~RANK()\n");
/*
* Here is the problem.
* Since my vector consists of pointers to COMBO objects,
* I delete them upon RANK object's destruction. However,
* std::sort() calls RANK's destructor many times and
* throws some runtime error, unless commented out.
*/
//for (unsigned int …Run Code Online (Sandbox Code Playgroud)