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

如何將 std::sort 與結構向量和比較函數一起使用

How to use std::sort with a vector of structures and compare function?(如何將 std::sort 與結構向量和比較函數一起使用?)
本文介紹了如何將 std::sort 與結構向量和比較函數一起使用?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

感謝C 中的解決方案,現在我想在 C++ 中使用 std::sort 和 vector 來實現這一點:

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() 填充;比較函數:

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 中使用的比較函數不同的比較函數.該函數不返回 –1、0 或 1,而是返回一個 bool 值,指示第一個元素是否小于第二個元素.

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.

您有兩種可能性:為您的對象實現 operator <;在這種情況下,沒有第三個參數的默認 sort 調用將起作用;或者你可以重寫上面的函數來完成同樣的事情.

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.

請注意,您必須在參數中使用強類型.

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

另外,這里根本不使用函數也不錯.相反,使用函數對象.這些受益于內聯.

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());

這篇關于如何將 std::sort 與結構向量和比較函數一起使用?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

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

相關文檔推薦

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++ 中旋轉圖像而不使用 OpenCV 函數)
OpenCV: process every frame(OpenCV:處理每一幀)
Why can#39;t I open avi video in openCV?(為什么我不能在 openCV 中打開 avi 視頻?)
OpenCV unable to set up SVM Parameters(OpenCV 無法設置 SVM 參數)
Convert a single color with cvtColor(使用 cvtColor 轉換單一顏色)
主站蜘蛛池模板: 欧美日韩一区二区在线 | 国产91久久久久蜜臀青青天草二 | 国产午夜精品久久久 | 久久欧美精品 | 一级a爱片性色毛片免费 | 亚洲第1页 | 国产成人精品一区二区三区 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 国产一区二区三区四区 | 国产精品视频一区二区三区 | 在线色网| 国产视频二区在线观看 | 中文字幕黄色大片 | 国产精品视频在线播放 | 日韩免费视频一区二区 | 久久成人av电影 | 亚洲一区二区电影在线观看 | 人人干人人草 | 天天爱综合 | 久在线| 天堂一区在线观看 | 国产一级视频免费播放 | 四虎av电影 | 日韩另类 | 久草精品视频 | av免费网| 一级免费a | 九热在线| 欧美日韩一区在线播放 | av二区三区 | 精品一区二区三区在线视频 | 99精品视频在线观看 | 国产精品久久久久久久久久久久午夜片 | 狠狠综合久久av一区二区小说 | 综合久久久 | 日韩精品一区二区三区中文在线 | www.日本三级| 亚洲一区二区三区四区五区午夜 | 91亚洲国产成人精品一区二三 | 国产欧美精品一区 | 久久99精品久久久水蜜桃 |