Wprowadzenie.
Kontener “set” przeznaczony jest do przechowywania unikalnych elementów w określonej kolejności. W kontenerze set 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 set jest typową implementacją binarnego drzewa wyszukiwań;
- Wartości elementów w kontenerze set nie 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 “Set” zapisałem w pliku main.cpp i wygląda następująco.
#include <iostream> #include <set> using namespace std; int main() { int i = 0; set<int> mojKontenerSet; set<int>::iterator mojIterator; pair<set<int>::iterator, bool> para; // inicjalizacja wartości początkowych for(i=0; i<7; i++) { mojKontenerSet.insert(i); } // wyświetlenie wartości starowych for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++) { cout << *mojIterator << " "; } cout << endl; para = mojKontenerSet.insert(5); if(para.second == false) { cout << "Element nie zostal wstawiony !!!" << endl; } else { cout << "Wstawienie elementu zakonczylo sie pomyslnie" << endl; } // wyswietlenie wartości po próbie wstawienia istniejącej już wartości for(mojIterator=mojKontenerSet.begin(); mojIterator!=mojKontenerSet.end(); mojIterator++) { cout << *mojIterator << " "; } cout << endl; para = mojKontenerSet.insert(23); if(para.second == false) { cout << "Element nie zostal wstawiony !!!" << endl; } else { cout << "Wstawienie elementu zakonczylo sie pomyslnie" << endl; } // wyswietlenie wartości po próbie wstawienia nowej unikalnej wartości 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
Element nie zostal wstawiony !!!
0 1 2 3 4 5 6
Wstawienie elementu zakonczylo sie pomyslnie
0 1 2 3 4 5 6 23