Programowanie w C++ – RPi – STL – Multiset

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 

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *