我剛剛與std :: vector第一次接觸,現在我想改變使用普通C風格數組的壞習慣。我發現std :: list是在排序時使用的容器。但是,我不是100%如何完成以下操作:如何將元素添加到排序列表...? (C++)
我正在做一些計算,其結果取決於兩個指數(我和j)。最後,我只對100個最小的結果感興趣(不一定是100,但肯定比我的計算值總數小得多,在下面的代碼中是m * n)。
const int L = 100;
int i_list[L];
int j_list[L];
double value_list[L];
for (int i=0;i<m;i++){
for (int j=0;j<n;j++){
double x = doSomeCalculations(i,j);
insertTheValueAndIndices(i,j,x,i_list,j_list,value_list);
}
}
完成後,value_list應該包含100個最小值(遞增順序)和i_list/j_list對應的索引。我有一個「insertValuesAndIndices()」的工作版本,但我使用普通數組和插入新值的最低效方式。在寫我意識到,我其實有兩個不同的問題:
計算值(m * n個)的數量遠遠大於我想保留在列表中,因此只需保持所有值的數量和最終只進行一次排序並不是真正的選擇。另一方面,我只需要在最後以正確的順序得到結果,所以也許有一種方法只對列表進行一次排序。這種分類有什麼「標準」的巧妙和有效的方法嗎?
即使我可以存儲所有結果並在之後進行排序,我不知道如何使用std :: list.sort()以正確的順序獲取索引數組。我腦海中想到的是定義一些包含結果和兩個索引的類,將這些元素放在一個列表中,然後使用比較器來檢查只有值才能進行排序。但是,也許有更直接的方法來做同樣的事情?
乾杯&預先感謝
['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)可以用['std :: sort'](http://en.cppreference .COM/W/CPP /算法/排序)。 – 2014-10-31 13:33:30
「std :: list是用於排序的容器」 - 呃?你爲什麼這麼說?任何序列容器都可以排序。 – 2014-10-31 13:35:20
[應該std :: list被棄用?](http://stackoverflow.com/questions/13779719/should-stdlist-be-deprecated) – Drop 2014-10-31 13:37:42