基于vector <bool>的内容对vector vector <vector <bool >>进行排序

use*_*187 0 c++

我有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
Run Code Online (Sandbox Code Playgroud)

排序后:

vector 3: 0,0,0
vector 4: 1,0,0
vector 2: 1,0,1
vector 1: 1,1,1
Run Code Online (Sandbox Code Playgroud)

可以使用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());
Run Code Online (Sandbox Code Playgroud)

并且顺序为上面的"排序后".

为什么没有特殊的谓词呢?

Vla*_*cow 5

简单地应用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;
}
Run Code Online (Sandbox Code Playgroud)

输出是

0 0 0 
1 0 0 
1 0 1 
1 1 1 
Run Code Online (Sandbox Code Playgroud)

否则你可以std::accumulate在谓词中使用算法std::sort