我有2000个vector<vector<bool>>
,每个vector<bool>
包含200个元素,我将对向量的向量进行排序。假设vector<bool>
中的元素是一个二进制数。
原始数据:
vector 1: 1,1,1
vector 2: 1,0,1
vector 3: 0,0,0
vector 4: 1,0,0
排序后:
vector 3: 0,0,0
vector 4: 1,0,0
vector 2: 1,0,1
vector 1: 1,1,1
可以将
sort
与特殊谓词一起使用,但是令人惊讶的是,当我不带谓词调用sort
时,它似乎仍然可以工作。 vector<bool> A = {1, 1, 1};
vector<bool> B = {1, 0, 1};
vector<bool> C = {0, 0, 0};
vector<bool> D = {1, 0, 0};
vector < vector<bool> > v = {A,B,C,D};
sort(v.begin(),v.end());
顺序是上面的“排序后”。
为什么没有特殊谓词就可以工作?
最佳答案
只需应用标头std::sort
中声明的标准算法<algorithm>
就足够了,因为只要所有布尔向量的大小都相同,就为向量定义了operator <
。
这是一个例子
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<std::vector<bool>> v =
{
{ 1, 1, 1 }, { 1, 0, 1 }, {0, 0, 0 }, { 1, 0, 0 }
};
std::sort( v.begin(), v.end() );
for ( const std::vector<bool> &v1 : v )
{
for ( bool b : v1 ) std::cout << b << ' ';
std::cout << std::endl;
}
return 0;
}
输出是
0 0 0
1 0 0
1 0 1
1 1 1
否则,您可以在
std::accumulate
的谓词中使用算法std::sort
关于c++ - 根据vector <bool>的内容对vector <vector <bool >>进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25567896/