首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将c++中的insert用于用户定义的数据类型?

如何将c++中的insert用于用户定义的数据类型?
EN

Stack Overflow用户
提问于 2016-10-14 06:28:57
回答 1查看 285关注 0票数 2

我想使用set<vector<data>>,其中data是用户定义的类,setvector都是STL,

代码语言:javascript
运行
复制
class  data  
{  
    int info;  
};  

我无法理解是需要为vector<data>data类定义比较器运算符还是只为data类定义比较器运算符。我们如何定义相同的比较器运算符呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-14 07:01:54

std::vector已经有了一个顺序--字典顺序--所以你通常不需要对它做任何事情。

如果使用默认的向量排序,则始终需要为自己的类定义排序(不需要的情况请参见下面的示例),最常见的方法是重载operator<

注意,排序关系必须是一个严格弱序,或者使用该集合是未定义的。

如果您想要一种特殊的“平等”感的集合,您需要定义自己的。

例如,此代码将生成一个集,其中长度相同的向量被视为相等(因此,在集合中只添加了每个长度中的第一个):

代码语言:javascript
运行
复制
template<typename T>
struct shorter_vector
{
    bool operator() (const std::vector<T>& left, const std::vector<T>& right) const
    {
        return left.size() < right.size();
    }

};

// ...
struct A { int x; };
std::set<std::vector<A>, shorter_vector<A>> samelengths;
samelengths.insert({A{1}});
samelengths.insert({A{2}});
samelengths.insert({A{3},A{4}});
samelengths.insert({A{5},A{67}});
// set now contains {A{1}} and {A{3},A{4}}

注意,这个集合不需要对向量的元素排序,因为等价关系仅在结构上定义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40036362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档