Здравствуйте, Аноним, Вы писали:
А>Гарантируется ли, что при проходе множества таким образом:
А>
А>std::set<int> s;
А>...
А>for( auto it = s.begin(); it != s.end(); ++it ) {
А>...
А>}
А>
А>элементы множества будут пройдены в возрастающем порядке? А>Если можно, то приведите где об этом написано в стандарте. Я ищу весь вечер, не могу найти.
А>Спасибо!
Вы не совсем то ищите. Тут надо плясать от того, что стд::сет — обязательно ли сортированный набор? Если да, то ответ на ваш вопрос очевиден
А>Гарантируется ли, что при проходе множества таким образом: А>элементы множества будут пройдены в возрастающем порядке?
Похоже, в стандарте это не гарантируется. Я не нашел.
о_О>Вы не совсем то ищите. Тут надо плясать от того, что стд::сет — обязательно ли сортированный набор? Если да, то ответ на ваш вопрос очевиден
Да, он сортированный.
23.1.2
9 The fundamental property of iterators of associative containers is that they iterate through the containers in
the non-descending order of keys where non-descending is defined by the comparison that was used to construct
them. For any two dereferenceable iterators i and j such that distance from i to j is positive,
value_comp(*j, *i) == false
10 For associative containers with unique keys the stronger condition holds,
value_comp(*i, *j) != false.
Здравствуйте, Vamp, Вы писали:
А>>Гарантируется ли, что при проходе множества таким образом: А>>элементы множества будут пройдены в возрастающем порядке? V>Похоже, в стандарте это не гарантируется. Я не нашел.
т.е. Я правильно понимаю что в одной из версий stl может случайно оказаться другой предикат (отличный от std::less) ?
Здравствуйте, nen777w, Вы писали:
N>Здравствуйте, Vamp, Вы писали:
А>>>Гарантируется ли, что при проходе множества таким образом: А>>>элементы множества будут пройдены в возрастающем порядке? V>>Похоже, в стандарте это не гарантируется. Я не нашел. N>т.е. Я правильно понимаю что в одной из версий stl может случайно оказаться другой предикат (отличный от std::less) ?
во-первых, вам уже показали, что порядок от наименьшего (согласно компаратору) до наибольшего гарантирован
во-вторых, не может
23.3.3 Class template set
2.
namespace std {
template <class Key, class Compare = less<Key>,
class Allocator = allocator<Key> >
class set {
...