Witam,
Mam następujący problem w STL: chcę wyszukać pewien element wektora, a następnie go usunąć. Ponieważ wektor jest posortowany chcę wykorzystać wyszukiwanie binarne (lub inne, które wykorzysta to uporządkowanie).
Wiem, że w nagłówku <algorithm> znajduje się funkcja binary_search, ale zwraca ona czy element znajduje się w kontenerze lub nie, a ja potrzebuje indeks na jakiej pozycji się on znajduje. Mam funkcje:
http://www.cplusplus.com/reference/algorithm/adjacent_find/
ale nie wykorzystuje ona uporządkowania tablicy.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Dane {
int indeks;
int wartosc;
Dane(int indeks, int wartosc) : indeks(indeks), wartosc(wartosc) { }
void wyswietl() {
cout << indeks << " " << wartosc << "\n";
}
};
bool comparator(Dane a, Dane b) {
return a.indeks < b.indeks;
}
int main()
{
vector<Dane> baza;
/*
* Pobierz dane
*/
int in, wa;
for(int i = 0; i < 4; ++i) {
cout << "Podaj indeks: ";
cin >> in;
cout << "Podaj wartosc: ";
cin >> wa;
baza.push_back(Dane(in, wa));
}
/*
* Posortuj dane
*/
sort(baza.begin(), baza.end(), comparator);
cout << "Pobrano" << "\n";
for(int i = 0; i < baza.size(); ++i) baza[i].wyswietl();
/*
* Wyszukiwanie binarne: znajdz jego indeks
*/
/*
* Usun znaleziony element
*/
/*
* Wyswietl rezultat
*/
for(int i = 0; i < baza.size(); ++i) baza[i].wyswietl();
return 0;
}
Jak można to zrobić najprościej?