Словари с дубликатами (multimap)
Êaê óæå óïîìèíaëîñü, ñëîâaðè ñ äóáëèêaòaìè (multimap) äîïóñêaþò õðaíåíèå ýëåìåíòîâ ñ îäèíaêîâûìè êëþ÷aìè. Ïîýòîìó äëя íèõ íå îïðåäåëåía îïåðaöèя äîñòóïa ïî èíäåêñó [ ], a äîáaâëåíèå ñ ïîìîùüþ ôóíêöèè insert âûïîëíяåòñя óñïåøíî â ëþáîì ñëó÷aå. Ôóíêöèя âîçâðaùaåò èòåðaòîð ía âñòaâëåííûé ýëå- ìåíò.
Ýëåìåíòû ñ îäèíaêîâûìè êëþ÷aìè õðaíяòñя â ñëîâaðå â ïîðяäêå èõ çaíåñåíèя. Ïðè óäaëåíèè ýëåìåíòa ïî êëþ÷ó ôóíêöèя erase âîçâðaùaåò êîëè÷åñòâî óäaëåí- íûõ ýëåìåíòîâ. Ôóíêöèя equal_range âîçâðaùaåò äèaïaçîí èòåðaòîðîâ, îïðåäå- ëяþùèé âñå âõîæäåíèя ýëåìåíòa ñ çaäaííûì êëþ÷îì. Ôóíêöèя COunt ìîæåò âåð- íóòü çía÷åíèå, áîëüøåå 1.  îñòaëüíîì ñëîâaðè ñ äóáëèêaòaìè aíaëîãè÷íû îáû÷íûì ñëîâaðяì.
Множества (set)
Ìíîæåñòâî — ýòî aññîöèaòèâíûé êîíòåéíåð, ñîäåðæaùèé òîëüêî çía÷åíèя êëþ-
÷åé, òî åñòü òèï value_type ñîîòâåòñòâóåò òèïó Key. Çía÷åíèя êëþ÷åé äîëæíû áûòü óíèêaëüíû. Øaáëîí ìíîæåñòâa èìååò äâa ïaðaìåòða: òèï êëþ÷a è òèï ôóíêöèîíaëüíîãî îáúåêòa, îïðåäåëяþùåãî îòíîøåíèå «ìåíüøå»:
template > Class set{
publiC:
typedef Key key_type;
typedef Key value_type;
expliCit set(COnst COmpare& COmp = COmpare()); template
set(InputIter first, InputIter last, COnst COmpare& COmp = COmpare());
set(COnst set& x); pair insert(COnst value_type& x);
iteratOr insert(iteratOr pOsitiOn, COnst value_type& x); template
vOid insert(InputIter first, InputIter last); vOid erase(iteratOr pOsitiOn);
size_type erase(COnst key_type& x);
vOid erase(iteratOr first, iteratOr last);
vOid swap(set&); vOid Clear();
iteratOr find(COnst key_type& x) COnst; size_type COunt(COnst key_type& x) COnst; iteratOr lOwer_bOund(COnst key_type& x) COnst; iteratOr upper_bOund(COnst key_type& x) COnst;
pair equal_range(COnst key_type& x) COnst;
…
};
Èç îïèñaíèя, ïðèâåäåííîãî ñ ñîêðaùåíèяìè, âèäíî, ÷òî èíòåðôåéñ ìíîæåñòâa aíaëîãè÷åí èíòåðôåéñó ñëîâaðя. Íèæå ïðèâåäåí ïðîñòîé ïðèìåð, â êîòîðîì ñîç- äaþòñя ìíîæåñòâa öåëûõ ÷èñåë:
inClude inClude
using namespaCe std;
typedef set > set_i; set_i::iteratOr i;
int main(){
int a[4] = {4, 2, 1, 2};
set_i s1; // Cîçäaåòñя ïóñòîå ìíîzåñòâî
set_i s2(a, a + 4); // Ìíîzåñòâî ñîçäaåòñя êîïèðîâaíèåì ìaññèâa set_i s3(s2); // Ðaáîòaåò êîíñòðóêòîð êîïèðîâaíèя s2.insert(10); // Âñòaâêa ýëåìåíòîâ
s2.insert(6);
fOr(i= s2.begin(); i != s2.end(); i++) // Âûâîä COut << *i << " ";
COut << endl;
// Ïåðåìåííaя äëя õðaíåíèя ðåçóëüòaòa equal_range: pair p;
p = s2.equal_range(2);
COut << *(p.first)<< " " << *(p.seCOnd) << endl; p = s2.equal_range(5);
COut << *(p.first)<< " " << *(p.seCOnd) << endl; return 0;
}
Ðåçóëüòaò ðaáîòû ïðîãðaììû:
1246 10
24
66
Êaê è äëя ñëîâaðя, ýëåìåíòû â ìíîæåñòâå õðaíяòñя îòñîðòèðîâaííûìè. Ïîâòî- ðяþùèåñя ýëåìåíòû â ìíîæåñòâî íå çaíîñяòñя.
Äëя ðaáîòû ñ ìíîæåñòâaìè â ñòaíäaðòíîé áèáëèîòåêå îïðåäåëåíû aëãîðèòìû, îïèñaííûå ía ñ. 364.
Do'stlaringiz bilan baham: |