C++的STL庫,vector sort排序時間複雜度 及常見容器比較
http://www.cnblogs.com/sthv/p/5511921.html
http://www.169it.com/article/3215620760.html
http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html
在C++的STL庫中,要實現排序可以 通過將所有元素儲存到vector中,然後通過sort演算法來排序,也可以通過multimap實現在插入元素的時候進行排序。在通過 vector+sort進行排序時,所有元素需要先存入vector容器中,sort在排序時又需要將元素全部取出來再進行排序。multimap底層實 現為紅黑樹,因此元素在插入的過程中就實現了排序。那麼到底哪一種排序速度更快呢?
下面有一個測試程式:
#include
<vector>
#include
<set>
#include
<algorithm>
#include
<stdio.h>
#include
<string.h>
#include
<unistd.h>
#include
<sys/types.h>
#include
<sys/time.h>
using namespace std;
double time ()
{
struct timeval
tv;
if (gettimeofday(&tv,
NULL) != 0) return 0.0;
return tv.tv_sec
+ tv.tv_usec / 1000000.0;
}
struct Score
{
string
name;
double score;
bool operator
<( const Score&
right) const {
return score
< right.score;
}
};
int main( int argc, char **
argv) {
vector<Score>
src;
for ( int i
= 0; i < 10000000; i++) {
int num
= rand ();
char buf[32];
sprintf (buf, "%d" ,
num);
Score
score = { buf, num };
src.push_back(score);
}
{
double stime
= time ();
vector<Score>
res;
for (vector<Score>::const_iterator
it = src.begin();
it
!= src.end(); ++it) {
res.push_back(*it);
}
sort(res.begin(),
res.end());
double etime
= time ();
|