如果我想使用std::list
并且插入到列表中的新元素将被插入到与比较函数相关的正确位置 - 我可以这样做吗? 或者我必须在每次插入后使用std :: sort?我可以让std :: list按顺序插入新元素吗?或者必须使用std :: sort?
0
A
回答
1
你有三个选择:
- 排序每次插入后
- 找到合适的索引和索引
- 使用std::set(推荐)
例为第三个选项,在插入:
#include <iostream>
#include <set>
int main()
{
int myints[] = {75,23,65,42,13};
std::set<int> myset (myints,myints+5);
std::cout << "myset contains:";
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
输出:
MYSET包含:13 23 42 65 75
+0
为什么我得到一个downvote?如果有我想知道的错误请。 – gsamaras
3
您可以使用:
- 的std ::如果你的元素不变
- 的std ::地图设置如果您的元素具有不可变的密钥,但应具有可变值
- std :: list并查找插入位置
的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';
}
另外,您可以填充一个整个的std ::向量,之后对其进行排序(注:性病::排序不能性病操作::目录::迭代器,它们不提供随机访问):
#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';
}
注:与插入位置的手工查找列表的表现是最差的O(N²)。
0
是的,你可以。尝试如下所示,只需更改比较功能和类型(如果需要)。
#include <list>
inline
int compare(int& a, int&b) {
return a - b;
}
template<typename T>
void insert_in_order(std::list<T>& my_list, T element, int (*compare)(T& a, T&b)) {
auto begin = my_list.begin();
auto end = my_list.end();
while ((begin != end) &&
(compare(*begin,element) < 0) ) {
++begin;
}
my_list.insert(begin, element);
}
int main() {
std::list<int> my_list = { 5,3,2,1 };
my_list.sort(); //list == { 1,2,3,5}
insert_in_order<int>(my_list, 4, &compare); //list == {1,2,3,4,5}
}
+0
只因为你可以不意味着你应该 –
相关问题
- 1. std :: sort是否改变了相等元素的相对顺序?
- 2. 插入元素到std ::使用构造
- 3. 我可以使用std :: partial_sort对std :: map进行排序吗?
- 4. sort std :: list区分大小写的元素
- 5. 使用std :: set排序std :: list
- 6. jQuery按正确顺序插入元素vs detach()。sort()?
- 7. 清除std :: list元素的顺序是什么?
- 8. 无法在迭代器的std :: set中插入元素到std :: list
- 9. 使用std :: make_move_iterator将std :: list <std :: unique_ptr >>插入另一个时出错
- 10. 为什么只有std :: list :: sort()?
- 11. std :: sort可能导致错误吗?
- 12. 我可以扔`std :: bad_cast`吗?
- 13. 我可以使用std :: pair作为std :: multimap中的键吗?
- 14. std :: sort on std :: vector <std::string>
- 15. 我可以使用伪元素来插入html元素吗?
- 16. 使用std :: sort和boost :: bind
- 17. 我可以让std :: string使用更少的内存吗?
- 18. std :: map插入或std :: map查找?
- 19. HowTo sort std :: map?
- 20. 如何使用std :: sort对std :: array进行排序?
- 21. 获取std :: list的前N个元素?
- 22. 初始化一个std :: unordered_map的std :: list元素
- 23. std :: list ::排序和指向元素的指针
- 24. std:排序vs插入std :: set
- 25. 不是std :: unordred_map保存插入顺序吗?
- 26. std :: list vs std :: vector迭代
- 27. 在std :: ostream上可以使用std :: back_insert_iterator吗?
- 28. C++ std :: vector std :: sort无限循环
- 29. std :: function可以使用函子吗?
- 30. 用std :: sort排序迭代器
每次插入后排序,或找到正确的地方开始并插入那里。 –
或使用'std :: set'。 – songyuanyao
准确地说,当我输入我的答案@songyuanyao时,我想到了Joachim的评论。 – gsamaras