久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何將 std::sort 與結(jié)構(gòu)向量和比較函數(shù)一起使用

How to use std::sort with a vector of structures and compare function?(如何將 std::sort 與結(jié)構(gòu)向量和比較函數(shù)一起使用?)
本文介紹了如何將 std::sort 與結(jié)構(gòu)向量和比較函數(shù)一起使用?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

感謝C 中的解決方案,現(xiàn)在我想在 C++ 中使用 std::sort 和 vector 來(lái)實(shí)現(xiàn)這一點(diǎn):

Thanks for a solution in C, now I would like to achieve this in C++ using std::sort and vector:

typedef struct
{
  double x;
  double y;
  double alfa;
} pkt;

向量<包>wektor; 使用 push_back() 填充;比較函數(shù):

vector< pkt > wektor; filled up using push_back(); compare function:

int porownaj(const void *p_a, const void *p_b)
{
  pkt *pkt_a = (pkt *) p_a;
  pkt *pkt_b = (pkt *) p_b;

  if (pkt_a->alfa > pkt_b->alfa) return 1;
  if (pkt_a->alfa < pkt_b->alfa) return -1;

  if (pkt_a->x > pkt_b->x) return 1;
  if (pkt_a->x < pkt_b->x) return -1;

  return 0;
}

sort(wektor.begin(), wektor.end(), porownaj); // this makes loads of errors on compile time

要糾正什么?在這種情況下如何正確使用 std::sort?

What is to correct? How to use properly std::sort in that case?

推薦答案

std::sort 采用與 qsort 中使用的比較函數(shù)不同的比較函數(shù).該函數(shù)不返回 –1、0 或 1,而是返回一個(gè) bool 值,指示第一個(gè)元素是否小于第二個(gè)元素.

std::sort takes a different compare function from that used in qsort. Instead of returning –1, 0 or 1, this function is expected to return a bool value indicating whether the first element is less than the second.

您有兩種可能性:為您的對(duì)象實(shí)現(xiàn) operator <;在這種情況下,沒(méi)有第三個(gè)參數(shù)的默認(rèn) sort 調(diào)用將起作用;或者你可以重寫(xiě)上面的函數(shù)來(lái)完成同樣的事情.

You have two possibilites: implement operator < for your objects; in that case, the default sort invocation without a third argument will work; or you can rewrite your above function to accomplish the same thing.

請(qǐng)注意,您必須在參數(shù)中使用強(qiáng)類(lèi)型.

Notice that you have to use strong typing in the arguments.

另外,這里根本不使用函數(shù)也不錯(cuò).相反,使用函數(shù)對(duì)象.這些受益于內(nèi)聯(lián).

Additionally, it's good not to use a function here at all. Instead, use a function object. These benefit from inlining.

struct pkt_less {
    bool operator ()(pkt const& a, pkt const& b) const {
        if (a.alfa < b.alfa) return true;
        if (a.alfa > b.alfa) return false;

        if (a.x < b.x) return true;
        if (a.x > b.x) return false;

        return false;
    }
};

// Usage:

sort(wektor.begin(), wektor.end(), pkt_less());

這篇關(guān)于如何將 std::sort 與結(jié)構(gòu)向量和比較函數(shù)一起使用?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Assertion failed (size.widthgt;0 amp;amp; size.heightgt;0)(斷言失敗(size.width0 amp;amp; size.height0))
Rotate an image in C++ without using OpenCV functions(在 C++ 中旋轉(zhuǎn)圖像而不使用 OpenCV 函數(shù))
OpenCV: process every frame(OpenCV:處理每一幀)
Why can#39;t I open avi video in openCV?(為什么我不能在 openCV 中打開(kāi) avi 視頻?)
OpenCV unable to set up SVM Parameters(OpenCV 無(wú)法設(shè)置 SVM 參數(shù))
Convert a single color with cvtColor(使用 cvtColor 轉(zhuǎn)換單一顏色)
主站蜘蛛池模板: 欧美性生活视频 | 一区二区三区日 | 国产视频第一页 | av中文网 | 国产精品不卡 | 手机日韩 | 欧美1区| 97日韩精品 | 激情 一区| 国产精品久久久久久久久久 | 国产成人精品一区 | 国产91视频免费 | 欧美激情精品久久久久久变态 | 日韩精品a在线观看图片 | 人碰人操 | 99精品欧美一区二区三区 | 国产亚洲一区二区三区 | 亚洲精品4 | 久色激情 | av一级久久 | 国产又爽又黄的视频 | 亚洲欧洲成人av每日更新 | 久久亚洲欧美日韩精品专区 | 日本a∨视频 | 一二三四在线视频观看社区 | 欧美久久国产精品 | 欧美亚洲国产一区二区三区 | 中文字幕一区二区三区精彩视频 | 亚洲精品电影网在线观看 | 欧美日韩成人在线观看 | 久久躁日日躁aaaaxxxx | 国产精品久久久久久久模特 | 精品国产一区二区三区成人影院 | 国产在线观 | 手机在线观看av | 激情的网站 | 一区视频在线 | 老司机深夜福利网站 | 欧美一页 | 日韩在线观看中文字幕 | 一级黄片一级毛片 |