第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何根據(jù)對(duì)的第二個(gè)元素對(duì)對(duì)向量進(jìn)行排序?

如何根據(jù)對(duì)的第二個(gè)元素對(duì)對(duì)向量進(jìn)行排序?

C++
炎炎設(shè)計(jì) 2019-08-09 17:45:07
如何根據(jù)對(duì)的第二個(gè)元素對(duì)對(duì)向量進(jìn)行排序?如果我有一對(duì)矢量:std::vector<std::pair<int, int> > vec;是否有簡(jiǎn)單的方法根據(jù)對(duì)的第二個(gè)元素按遞增順序?qū)α斜磉M(jìn)行排序?我知道我可以編寫一個(gè)可以完成工作的小函數(shù)對(duì)象,但是有沒(méi)有辦法使用STL的現(xiàn)有部分并std::less直接進(jìn)行工作?編輯:我明白我可以編寫一個(gè)單獨(dú)的函數(shù)或類來(lái)傳遞給第三個(gè)參數(shù)進(jìn)行排序。問(wèn)題是我是否可以用標(biāo)準(zhǔn)的東西來(lái)構(gòu)建它。我真的看起來(lái)像:std::sort(vec.begin(), vec.end(), std::something_magic<int, int, std::less>());
查看完整描述

3 回答

?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

使用c ++ 14,由于lambda現(xiàn)在可以有類型的參數(shù),因此最好的解決方案非常容易編寫auto。這是我目前最喜歡的解決方案

std::sort(v.begin(), v.end(), [](auto &left, auto &right) {
    return left.second < right.second;});

只需使用自定義比較器(它是可選的第三個(gè)參數(shù)std::sort

struct sort_pred {
    bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
        return left.second < right.second;
    }};std::sort(v.begin(), v.end(), sort_pred());

如果您使用的是C ++ 11編譯器,則可以使用lambdas編寫相同的代碼:

std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) {
    return left.second < right.second;});

編輯:為了回應(yīng)您對(duì)問(wèn)題的編輯,這里有一些想法...如果您真的想要有創(chuàng)意并且能夠重復(fù)使用這個(gè)概念,那么只需制作一個(gè)模板:

template <class T1, class T2, class Pred = std::less<T2> >struct sort_pair_second {
    bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) {
        Pred p;
        return p(left.second, right.second);
    }};

那么你也可以這樣做:

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

甚至

std::sort(v.begin(), v.end(), sort_pair_second<int, int, std::greater<int> >());

雖然說(shuō)實(shí)話,這有點(diǎn)矯枉過(guò)正,只需編寫3行功能并完成它:-P



查看完整回答
反對(duì) 回復(fù) 2019-08-09
?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

你可以像這樣使用boost:

std::sort(a.begin(), a.end(), 
          boost::bind(&std::pair<int, int>::second, _1) <
          boost::bind(&std::pair<int, int>::second, _2));

我不知道一種標(biāo)準(zhǔn)的方法來(lái)做到這一點(diǎn)同樣簡(jiǎn)短,但你可以抓住boost::bind它所有的標(biāo)題。


查看完整回答
反對(duì) 回復(fù) 2019-08-09
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

它非常簡(jiǎn)單,您可以使用算法中的sort函數(shù)并添加自己的比較函數(shù)

vector< pair<int,int > > v;sort(v.begin(),v.end(),myComparison);

現(xiàn)在你必須根據(jù)第二個(gè)選擇進(jìn)行比較,因此將“myComparison”聲明為

bool myComparison(const pair<int,int> &a,const pair<int,int> &b){
       return a.second<b.second;}


查看完整回答
反對(duì) 回復(fù) 2019-08-09
  • 3 回答
  • 0 關(guān)注
  • 588 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)