Wprowadzenie.
Kontener „Multiset” przeznaczony jest do przechowywania elementów w określonej kolejności. W przeciwieństwie do kontenera set wartości elementów mogą się powtarzać. W kontenerze multiset wartość elementu jest jednocześnie identyfikatorem. Wartości elementów tego kontenera nie mogą być modyfikowanie, natomiast jest możliwe wstawianie nowych lub usuwanie istniejących elementów. Wstawiając lub usuwając elementy kontenera, przeprowadzane jest automatyczne sortowanie całego zbioru.
Zakres artykułu.
- Właściwości kontenera
- Program w C++
- Plik Makefile
- Testy
Właściwości kontenera
- Kontener multiset jest typową implementacją binarnego drzewa wyszukiwań;
- Wartości elementów w kontenerze multiset mogą się powtarzać;
- Wartość elementu służy również jako identyfikator;
- Elementy w kontenerze są uporządkowane w ściśle określonej kolejności;
- Brak bezpośredniego dostępu do konkretnego elementu. Dostęp uzyskuje się przy pomocy iteratorów.
Program w C++
Kod programu, który pozwoli na przetestowanie kontenera “Multiset” zapisałem w pliku main.cpp i wygląda następująco.
#include <iostream> #include <set> using namespace std; int main() { int i = 0; multiset<int> mojKontenerSet; multiset<int>::iterator mojIterator; pair<multiset<int>::iterator, bool> para; // inicjalizacja wartosci poczatkowych for(i=0; i<7; i++) { mojKontenerSet.insert(i); } // wyswietlenie wartosci starowych for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++) { cout << *mojIterator << " "; } cout << endl; mojKontenerSet.insert(5); // wyswietlenie wartosci po probie wstawienia istniejacej juz wartosci for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++) { cout << *mojIterator << " "; } cout << endl; mojKontenerSet.insert(23); // wyswietlenie wartossci po probie wstawienia nowej unikalnej wartosci for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++) { cout << *mojIterator << " "; } cout << endl; return 0; }
Plik Makefile
Plik Makefile wygląda następująco:
CC = g++
CFLAGS =
LIBS =
OBJ =\
main.o
all: main
clean:
rm -f *.o test
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $<
main: $(OBJ)
$(CC) $(OBJ) $(LIBS) -o test
Testy
Gdy już mamy wszystko przygotowane wówczas w konsoli wpisujemy polecenie:
$ make
Następnie uruchamiamy nasz program poleceniem:
$ ./test
Wynik jaki otrzymamy powinien wyglądać następująco:
0 1 2 3 4 5 6
0 1 2 3 4 5 5 6
0 1 2 3 4 5 5 6 23