网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月25日漏签0天
c++吧 关注:650,712贴子:2,118,071
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回c++吧
>0< 加载中...

自定类的vector的sort的使用,请教

  • 只看楼主
  • 收藏

  • 回复
  • 俄风不09
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
......
class T
{
private:
int t;
int y;
public:
int get_t(){return t;}
int get_y(){return y;}
};
......
vector<T> obj;
......
sort(obj.begin(),obj.end(),?????????);
//这??????????部位要怎么下,能按T::t排序vector<T> obj,怎么整?


  • Hope_20121221_
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写一个operator<, 或者写一个判断小于的comp填进去..


2026-01-25 02:07:00
广告
不感兴趣
开通SVIP免广告
  • star199111
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你好,下面这样应该可以吧。
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std; class T {
public:
T(int t, int y) : t(t), y(y) {}
int get_t() const { return t; }
int get_y() const { return y; }
private:
int t;
int y;
}; inline bool compareT(const T& t1, const T& t2) {
return t1.get_t() < t2.get_t();
} inline void printVectorT(const char* tip, const vector<T>& vt) {
cout << tip;
for (int i = 0; i != vt.size(); i++) {
cout << vt[i].get_t() << ", ";
}
cout << endl;
} int main()
{
vector<T> vt;
for (int i = 9; i >= 0; i--) {
vt.push_back(T(i, 0));
}
printVectorT("before sort: ", vt);
sort(vt.begin(), vt.end(), compareT);
printVectorT("after sort: ", vt); cin.get();
return 0;
}


  • star199111
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
晕,这么乱。贴图:





  • wqzhishou
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
方法1:使用默认的小于操作
inline bool operator<(const T& left, const T& right)
{
left.get_t() < right.get_t();
}
vector<T> vec;
// add data
sort(vec.begin(), vec.end());
方法2:使用函数表示排序策略(不推荐)
bool compare_t(const T& left, const T& right)
{
return left.get_t() < right.get_t();
}
sort(vec.begin(), vec.end(), compare_t);
方法3:使用函数对象:
struct Cmp_t : binary_function<bool, T, T> {
bool operator()(const T& left, const T& right)
{
return left.get_t() < right.get_t();
}
};
sort(vec.begin(), vec.end(), Cmp_t());
方法4:使用Lambda表达式
sort(vec.begin(), vec.end(), [](const T& left, const T& right){
return left.get_t() < right.get_t();
});
应该就这些了吧...


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回c++吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示