Существует ли эквивалентная структура данных TreeSet в C ++ с аналогичными функциями - PullRequest
0 голосов
/ 28 апреля 2018

Мне нужно использовать структуру данных Tree Set (доступную в java) в C ++ и использовать функции, такие как TreeSet.lower (i) и TreeSet.higher (i) ->, которые возвращают элемент чуть ниже, и просто выше, чем я в данном наборе деревьев. Есть ли STL?

Edit: Ниже приведены функции, которые мне нужны, мне было интересно, как использовать для этого функции upper_bound и lower_bound:

for (int i = 1; i<10; i++) myset.insert(i * 10); // 10 20 30 40 50 60 70 80 90
int k = 50;  // I need 40 and 60
set<int>::iterator itr = myset.find(k);

if (itr != myset.end()) {
    // Found the element
    itr--; // Previous element;
    cout << *(itr); //prints 40
    itr++; // the element found
    itr++; // The next element
    cout << *(itr);  // prints 60
}

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Используйте std::set, что обычно реализуется в виде двоичного дерева поиска.

Методы

insert(), erase() и find() имеют логарифмический размер, но могут быть лучше при наличии подсказки. Логарифмическая сложность относится к Java TreeSet .

Думаю, вас заинтересует std::lower_bound, который возвращает итератор к нижней границе, и std::upper_bound, который возвращает итератор к верхней границе.

0 голосов
/ 28 апреля 2018

Вы можете использовать std::set
Посмотрите на std::set::lower_bound и std::set::upper_bound

...