Я действительно не знал, какой будет правильный заголовок для этого, пожалуйста, потерпите меня.
Итак, представьте, что у меня есть такой класс:
class data {
double a;
double b;
double c;
bool is_blue;
};
и затем я использую его для построения вектора, std::vector<data> vdata
. Что меня интересует, так это возможность сравнивать значения вектора на основе заданного свойства класса. Например, я хотел бы найти элемент с наименьшим a
или найти все элементы с b > 2.0
, или is_blue == true
.
У меня есть несколько идей о том, как этого добиться, но они не охватывают все случаи, которые я хочу. Например, я, вероятно, могу l oop над элементами vdata
, выбрать a
и построить std::vector<double>
, а затем использовать std::min_element
, чтобы получить мин. Или используйте std::find
, чтобы найти то, что я хочу.
Или, может быть, я могу использовать std::transform
и лямбду и генерировать вектор, показывающий, прошел ли мой тест или нет, а затем выбрать из него, например:
std::vector<bool> s;
std::transform(s.begin(), s.end(), std::back_inserter(ordinals),
[](auto &d) -> bool { return d.b > 2.0 });
Я также подумал может быть, я могу использовать std::sort
и в основном отсортировать vdata
на основе того, что меня интересует. Я даже не уверен, имеет ли этот метод смысл.
Итак, я знаю, как подойти к этому в по-разному, и они работают, но я чувствую, что что-то упустил, и это должен быть лучший способ, который охватывает все случаи. В основном меня интересуют некоторые сравнения и элементы min / max. У меня также есть полный контроль над классом data
, поэтому я могу свободно добавлять его, инкапсулировать в другой класс и т. Д. c.
PS Пожалуйста, дайте мне знать, если я смогу выбрать лучший заголовок для этого вопроса.