у меня есть map
объект, в который я хочу вставить новый элемент. После этого я хочу убедиться, что этот недавно вставленный элемент был вставлен в конце. Для этого я разработал следующий способ:
map<T1,T2> m;
//populate m
auto ret_pair = m.insert({o1,o2}); //o1,o2 objects of types T1,T2
auto end = m.cend();
--end;
if (ret_pair.first != end) //<-- this worries me
throw runtime_error("boom");
Строка, где я сравниваю два итератора, меня беспокоит, потому что я не уверен, могу ли я рассчитывать на то, что эти разные итераторы будут одинаковыми, даже если они указывают на одно и то же.
Как вы думаете? Почему это (не) работает?
Итераторы, которые указывают на один и тот же элемент, сравнивают равными. Если бы они этого не сделали, каждый алгоритм в стандартной библиотеке сломался бы.
Так что да, ваш код в порядке.
Других решений пока нет …