簡體   English   中英

使用變量索引對向量進行向量排序

[英]Sort vector of vector using variable index

我在使用std排序功能時遇到了一些問題。 我想對向量的向量進行排序而不使用始終相同的索引。 我知道我可以使用類似:

sort(dataset.begin(), dataset.end(), myfunction);
// or
std::sort(dataset.begin(), dataset.end(),
    [](const std::vector<int>& a, const std::vector<int>& b) {
        return a[2] < b[2]);
    });

在第一種情況下,我不知道如何將指定的索引作為myfunction的輸入。 在第二種情況下,盡管我將索引作為函數簽名的輸入,但我什至不能像上面顯示的那樣編譯它!

錯誤:

main.cpp:28:39:錯誤:預期表達式sort(dataset.begin(),dataset.end(),[](const vector&a,const vector&b)

您可以捕獲index並在lambda函數中使用它:

std::vector<std::vector<int>> dataset = ...

std::size_t index = 2;
std::sort(dataset.begin(), dataset.end(),
    [index](const std::vector<int>& a, const std::vector<int>& b) {
    return a[index] < b[index];
});
  1. lambda函數 -您可以捕獲index變量:

     std::size_t index = 2; std::sort(dataset.begin(), dataset.end(), [index](const std::vector<int>& a, const std::vector<int>& b) { return a[index] < b[index]); }); 
  2. 功能 -如果有

     bool myfunction(const std::vector<int>& a, const std::vector<int>& b, std::size_t index) 

    您可以將std::bind索引添加到第三個參數:

     using namespace std::placeholders; std::size_t index = 2; std::sort(dataset.begin(), dataset.end(), std::bind(myfunction, _1, _2, index)); 

    考慮此解決方案不如lambdas,僅在不可用時才使用它,否則您將受到不好的對待。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM