如果我想使用std::list并且插入到列表中的新元素将插入到与比较函数相关的正确位置 - 我可以这样做吗?或者我必须在每次插入后使用std :: sort?
小智 11
您可以使用:
std :: list with std :: lower_bound:
#include <algorithm>
#include <list>
#include <iostream>
int main()
{
std::list<int> list;
int values[] = { 7, 2, 5,3, 1, 6, 4};
for(auto i : values)
list.insert(std::lower_bound(list.begin(), list.end(), i), i);
for(auto i : list)
std::cout << i;
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以填充整个std :: vector并在之后对其进行排序(注意:std :: sort不能对std :: list :: iterators进行操作,它们不提供随机访问):
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> vector = { 7, 2, 5,3, 1, 6, 4};
std::sort(vector.begin(), vector.end());
for(auto i : vector)
std::cout << i;
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
注意:手动查找插入位置的列表的性能是最差的O(N²).
| 归档时间: |
|
| 查看次数: |
4870 次 |
| 最近记录: |