Обход std::set
От: Аноним  
Дата: 11.05.11 16:38
Оценка:
Гарантируется ли, что при проходе множества таким образом:

std::set<int> s;
...
for( auto it = s.begin(); it != s.end(); ++it ) {
...
}


элементы множества будут пройдены в возрастающем порядке?
Если можно, то приведите где об этом написано в стандарте. Я ищу весь вечер, не могу найти.

Спасибо!
c++ set
Re: Обход std::set
От: о_О
Дата: 11.05.11 16:51
Оценка: -2
Здравствуйте, Аноним, Вы писали:

А>Гарантируется ли, что при проходе множества таким образом:


А>
А>std::set<int> s;
А>...
А>for( auto it = s.begin(); it != s.end(); ++it ) {
А>...
А>}
А>


А>элементы множества будут пройдены в возрастающем порядке?

А>Если можно, то приведите где об этом написано в стандарте. Я ищу весь вечер, не могу найти.

А>Спасибо!

Вы не совсем то ищите. Тут надо плясать от того, что стд::сет — обязательно ли сортированный набор? Если да, то ответ на ваш вопрос очевиден
Re: Обход std::set
От: Vamp Россия  
Дата: 11.05.11 17:00
Оценка:
А>Гарантируется ли, что при проходе множества таким образом:
А>элементы множества будут пройдены в возрастающем порядке?
Похоже, в стандарте это не гарантируется. Я не нашел.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Обход std::set
От: Sir-G  
Дата: 11.05.11 17:25
Оценка: +3
о_О>Вы не совсем то ищите. Тут надо плясать от того, что стд::сет — обязательно ли сортированный набор? Если да, то ответ на ваш вопрос очевиден
Да, он сортированный.

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.
Re[2]: Обход std::set
От: nen777w  
Дата: 11.05.11 21:34
Оценка:
Здравствуйте, Vamp, Вы писали:

А>>Гарантируется ли, что при проходе множества таким образом:

А>>элементы множества будут пройдены в возрастающем порядке?
V>Похоже, в стандарте это не гарантируется. Я не нашел.
т.е. Я правильно понимаю что в одной из версий stl может случайно оказаться другой предикат (отличный от std::less) ?
Re[3]: Обход std::set
От: uzhas Ниоткуда  
Дата: 12.05.11 05:58
Оценка:
Здравствуйте, 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 {
...

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.