地图与集合(stl)[英] map vs. set (stl)

问题描述

假设我有这样的东西,其中 ''name'' 是 POD 类型,并且
''value'' 是一个类.

标准::地图<名称、值 >

但后来我意识到''name''实际上应该是成员之一
''value'' 类的,所以我有一个冗余.然后我切换并开始
使用 std::set<价值>.为了让"价值"适合这个目的,我
让它看起来像这样...

类值 {
常量整数名称;
bool 运算符<(const value& rhs) const
{ 返回名称 <rhs.name;}
void operator=( const value& rhs );
...
};

这现在满足了集合的要求,并且可以正常工作.太好了.
但我觉得我好像真的偏离了一个想法
放.比如我的值的关键部分是不变的,但是整体
值不是.

我真的应该使用这样的集合吗?

推荐答案

Qwavel 写道:
假设我有这样的东西,其中 ''name'' 是 POD 类型,并且
''value'' 是一个类.

标准::地图<名称、值 >

但后来我意识到''name''实际上应该是成员之一
''value'' 类的,所以我有一个冗余.然后我切换并开始
使用 std::set<价值>.为了让"价值"适合这个目的,我
让它看起来像这样...

类值 {
常量整数名称;
bool 运算符<(const value& rhs) const
{ 返回名称 <rhs.name;}
void operator=( const value& rhs );
...
};

这现在满足了集合的要求,并且可以正常工作.太好了.
但我觉得我好像真的偏离了一个想法
放.比如我的值的关键部分是不变的,但是整体
值不是.

我真的应该使用这样的套装吗?
听起来你只需要一个矢量...

F

Qwavel 写道:
假设我有这样的东西,其中 ''name'' 是 POD 类型,并且
''value'' 是一个类.

标准::地图<名称、值 >

但后来我意识到''name''实际上应该是成员之一
''value'' 类的,所以我有一个冗余.然后我切换并开始
使用 std::set<价值>.为了让"价值"适合这个目的,我
让它看起来像这样...

类值 {
常量整数名称;
bool 运算符<(const value& rhs) const
{ 返回名称 <rhs.name;}
void operator=( const value& rhs );
...
};

这现在满足了集合的要求,并且可以正常工作.太好了.
但我觉得我好像真的偏离了一个想法
放.比如我的值的关键部分是不变的,但是整体
值不是.

我真的应该使用这样的套装吗?
我认为总是值得改进你的设计,让它自然,所以
感觉不错.您似乎只在考虑值类
就其在系列中的角色而言.尝试考虑值类
独立而不是您在地图或集合中使用它的方式.

您可能会发现为一组自定义比较器是可行的方法.

约翰

2007 年 5 月 23 日星期三 12:41:18 -0700,Qwavel 写道:
假设我有这样的东西,其中 ''name'' 是 POD 类型,并且
''value'' 是一个类.

标准::地图<名称、值 >

但后来我意识到''name''实际上应该是
的成员之一''value'' 类,所以我有冗余.然后我切换并开始使用
标准::设置<价值>.为了让"价值"适合这个目的,我做了它
长这样……

类值 {
常量整数名称;
bool 运算符<(const value& rhs) const
{ 返回名称 <rhs.name;}
void operator=( const value& rhs );
...
};

这现在满足了集合的要求,并且可以正常工作.伟大的.但是
我觉得好像我真的偏离了一个集合的想法.对于
例如,我的值的关键部分是恒定的,但整个值是
不是.

我真的应该使用这样的套装吗?
您可能面临的问题是您不能(不进行强制转换)
通过集合迭代器修改集合中的对象.集合迭代器是
基本上总是一个 const 迭代器,以防止破坏
设置.

--
马库斯·施德

本文地址:https://www.itbaoku.cn/post/1050509.html