欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

淺析stl序列容器(map和set)的仿函數(shù)排序

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

問題:set是一個(gè)自動有序的集合容器,這是set的一個(gè)最實(shí)惠的性質(zhì),從小到大,只要你插入進(jìn)去,就有序了。但是,如果你不想要這個(gè)順序呢,是不是可以人為控制set容器
的元素順序呢?答案是,可以的,因?yàn)閟tl也是程序員設(shè)計(jì)的。

首先看stl的模板構(gòu)造函數(shù)

復(fù)制代碼 代碼如下:

explicit set ( const Compare& comp = Compare(), const Allocator& = Allocator() );
template
set ( InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& = Allocator() );
set ( const set& x );

我們完全可以重定義set的構(gòu)造函數(shù)里的比較函數(shù),完成對set的自排序功能。

舉例:

復(fù)制代碼 代碼如下:

bool fncomp (int lhs, int rhs) {return lhs
struct classcomp {
bool operator() (const int& lhs, const int& rhs) const
{return lhs>rhs;} // 控制set逆序
};

void testset()
{
// 第一種使用方法
bool(*fn_pt)(int,int) = fncomp;
set sixth (fn_pt);
// 第二中使用方法
set s;                 // class as Compare
s.insert(4);
s.insert(5);
set::iterator it;
for(it=s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
cout <<endl;
};


注意:如果set元素是一個(gè)結(jié)構(gòu)體,你最好要設(shè)置你的仿函數(shù),不然set一般默認(rèn)是按第一個(gè)字段排序的,而我們的實(shí)際情況是想按序號i排序:
復(fù)制代碼 代碼如下:

struct ST_Message
{
public:
ST_Message(int seq, int64_t time, string strfrom, string strto, string strinfo){
this->seq=seq;this->time=time;this->strfrom=strfrom;this->strto=strto;this->strinfo=strinfo;}

int seq;
int64_t time;
string strfrom;
string strto;
string strinfo;

bool operator <(const ST_Message& other) const // 注意是const函數(shù)
{
if (seq != other.seq) // dtime按升序排序
{
return (seq < other.seq);
}
else if(time < other.time)
{
return (time < other.time);
}
else if(strcmp(strfrom.c_str(), other.strfrom.c_str()) != 0)
{
return (strcmp(strfrom.c_str(), other.strfrom.c_str()) < 0);
}
else if(strcmp(strto.c_str(), other.strto.c_str()) != 0)
{
return (strcmp(strto.c_str(), other.strto.c_str()) < 0);
}
else
{
return (strcmp(strinfo.c_str(), other.strinfo.c_str()) < 0);
}
}
};


stl中自動有序的容器map也和set有相同的應(yīng)用,如果你想快速理解,那么把這篇文章中的set改成map就差不多了。

總之,有序的stl容器在工程中應(yīng)用什么方便和廣泛,但是當(dāng)我們需要自己的排序的時(shí)候,可以用仿函數(shù)來設(shè)置它!

上一篇:變量定義與聲明的區(qū)別詳細(xì)解析

欄    目:C語言

下一篇:c++關(guān)鍵字mutable深入解析

本文標(biāo)題:淺析stl序列容器(map和set)的仿函數(shù)排序

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4073.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有