【发布时间】:2018-07-18 10:32:45
【问题描述】:
我是 cpp 中的菜鸟,我想获得一些帮助,我想选择包含这些对象列表的向量中的最小值。它是一种选择聚合
class Label{
private:
std::string lbl;
int n;
public:
int getN() const { return this->n; }
std::string getlbl() const { return this->lbl; }
};
int main() {
std::vector<Label> my_vect = {
{"labl07", 0}, {"labl07", 0}, {"labl07", 0},
{"labl07", 0}, {"labl07", 0}, {"labl02", 232},
{"labl02", 232}, {"labl02", 233}, {"labl02", 234},
{"labl02", 230}, {"labl02", 233}, {"labl02", 234},
{"labl02", 229}, {"labl03", 379}, {"labl03", 377},
{"labl03", 379}, {"labl03", 381}, {"labl03", 380},
{"labl03", 377}, {"labl03", 381}, {"labl03", 372}
};
for(auto & v: my_vect)
{
cout <<"dis : "<< v.getlbl() <<" value " << v.getN() << endl;
}
return 0;
}
我希望能做到这一点
dis : labl07 value 0
dis : labl02 value 229
dis : labl03 value 372
在下面的一些 cmets 中,他们使用地图关联容器我需要了解为什么而不是向量。
【问题讨论】:
-
std::sort向量并且只打印第一个元素?如果您想消除重复,请在排序后应用std::unique... -
我不想删除重复项,我想获得该向量中每个标签名称的最小值
-
@cht_usr 然后不要申请
std::unique,不过,排序和选择第一次出现的标签就可以了。如果您没有合适的operator <,您可以提供一个自定义比较器作为 lambda:[](Label const& x, Label const& y) { return x.lbl < y.lbl || x.lbl == y.lbl && x.n < y.n; } -
您是否依赖按向量中第一次出现的顺序列出标签?
标签: c++