Я хочу найти нет элементов, присутствующих в наборе перед нижней границей данного элемента, я думал об использовании арифметики указателя с помощью std :: set :: итераторы, так как они ведут себя, как указатель, вот что я пробовал:Как подсчитать количество элементов перед данным элементом в std :: set
set<int>q;
set<int>::iterator curr;
set<int>::iterator strt;
l = num.size();
q.insert(num[l-1]);
strt = q.begin();
temp = 1;
int x;
for(int i=l-2;i>=0;i--)
{
curr = q.lower_bound(num[i]);
if(curr == q.end())
stats.push_back({temp,0});
else
{
x = curr-strt;//ERROR
stats.push_back({x,temp-x});
}
q.insert(num[i]);
temp++;
}
есть не любой способ найти не из элементов, содержащиеся в наборе до нижней границы с данным элементом?
Что такое «O (n)», существует ли какой-либо другой метод с меньшей временной сложностью или есть ли более подходящий контейнер? – Sab
@Sab: В зависимости от того, что еще вы делаете, сортированный массив/вектор может быть лучше. Вы можете использовать 'std :: lower_bound' и т. Д. Для поиска в логарифмическом времени и находить расстояния итератора в постоянное время. Для поддержания упорядоченного заказа может потребоваться больше работы. –
@MikeSeymour Важно отметить, что «вам нужно будет выполнять итерацию по множеству от начала до точки, которую вы нашли» не является свойством сбалансированных деревьев вообще, а просто деревьев STL в частности. Возможно, вы захотите увидеть мой ответ ниже. –