С++ использует std::lower_bound для поиска элемента в массиве по двум параметрамC++

Программы на C++. Форум разработчиков
Ответить
Гость
 С++ использует std::lower_bound для поиска элемента в массиве по двум параметрам

Сообщение Гость »


У меня проблема с использованием

Код: Выделить всё

lower_bound
to find element in array by 2 parameters.
I have a

Код: Выделить всё

struct person{
public:
person(const std::string CITY, const std::string ADDRESS, const std::string REGION, const unsigned ID, std::string PARENT = ""): m_city(CITY), m_addr(ADDRESS), m_region(REGION), m_id(ID), m_parent(PARENT) {}

std::string m_city;
std::string m_addr;

std::string m_region;
unsigned m_id;

std::string m_parent;

};
from this structs there is a

Код: Выделить всё

std::vector
How can I find exact person using

Код: Выделить всё

lower_bound
in which is already sorted by Region?
My approach works the worst way. Most of the time it doesn't find anything.

Код: Выделить всё

auto iteratorRegion = findPerson(m_sortedByRegion, candidatePerson);

std::vector::iterator findPerson(std::vector& ARRAY, const person& candidatePerson) const {
auto iterator = std::lower_bound(ARRAY.begin(), ARRAY.end(), candidatePerson, cityAdressComparator);    if (iterator != ARRAY.end() && iterator->m_city == candidatePerson.m_city && iterator->m_addr == candidatePerson.m_addr) {
return iterator;
}
auto iterator2 = std::lower_bound(ARRAY.begin(), ARRAY.end(), candidatePerson, regionIDComparator);     if (iterator2 != ARRAY.end() && iterator2->m_region == candidatePerson.m_region && iterator2->m_id == candidatePerson.m_id) {
return iterator2;
}
return ARRAY.end();
}

All comparators looks like this inside:

Код: Выделить всё

if (!(realEstateL.m_city == realEstateR.m_city))
{
return realEstateL.m_city < realEstateR.m_city;
}
return realEstateL.m_addr < realEstateR.m_addr;


Источник: https://stackoverflow.com/questions/781 ... parameters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»