Я видел следующую программу на cplusplus.com .
// set::insert (C++98)
#include <iostream>
#include <set>
int main ()
{
std::set<int> myset;
std::set<int>::iterator it;
std::pair<std::set<int>::iterator,bool> ret;
// set some initial values:
for (int i=1; i<=5; ++i) myset.insert(i*10); // set: 10 20 30 40 50
ret = myset.insert(20); // no new element inserted
if (ret.second==false) it=ret.first; // "it" now points to element 20
myset.insert (it,25); // max efficiency inserting
myset.insert (it,24); // max efficiency inserting
myset.insert (it,26); // no max efficiency inserting
int myints[]= {5,10,15}; // 10 already in set, not inserted
myset.insert (myints,myints+3);
std::cout << "myset contains:";
for (it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Вывод этой программы:
myset contains: 5 10 15 20 24 25 26 30 40 50
В строке 16 th комментарий говорит, что std::set<int>::iterator it
теперь указывает на элемент 20, второй элемент в наборе. Но я, похоже, не понимаю, почему так происходит или как на самом деле работает утверждение if (ret.second==false) it=ret.first;
.
Было бы очень полезно, если бы кто-нибудь объяснил мне, как работает этот код. Тем не менее, можно иметь в виду, что я новичок в std::set
.