C++ 在 Map 中的类的一组值中插入一个值
Posted
技术标签:
【中文标题】C++ 在 Map 中的类的一组值中插入一个值【英文标题】:C++ insert a value in a set of values from a class in a Map 【发布时间】:2017-11-29 15:58:27 【问题描述】:我的班级Cjt_Trets
中有一个地图,其中包含一个名为rasgo
的字符串和一个名为Trets
的班级。在 Trets 中,我有一个 set<int> id;
,它将包含包含 rasgo
的人的 id
。当我尝试将函数接收的id
插入该集合时,我的问题就出现了。我该怎么做?
这里我留下部分代码可以帮助你理解我的情况:
类 Cjt_Trets 的私有:
private:
map<string, Trets> mtrets;
;
Trets 的私人:
private:
set<int> id;
string gen;
;
代码的实际部分我不知道怎么做:
void Cjt_Trets::afegir_tret(int id, string rasgo)
mtrets.insert( make_pair<string, Trets> (rasgo, Trets.id.insert(id)) );
【问题讨论】:
您描述了您在示例中使用的类型和成员,但缺少很多信息。请提供minimal reproducible example。id
来自 Trets 是私有的,你不能从其他类访问
insert
返回一个 pair
所以你必须修改它
我认为简单地创建两个虚拟类并向我们展示几行的minimal reproducible example 来复制问题会更容易,而不是通过对 Trets 游戏的描述。跨度>
make_pair
的目的是不提供模板参数,让推理发生。
【参考方案1】:
因为你有一个类Trets
,你不能做Trets.id
,因为id是这个类的一个非静态成员,即使是,你也可以通过调用Trets::id
来访问它。但是,要将某些内容插入std::map<string, Trets>
,您需要Trets
的对象,而std::set::insert
返回std::pair<iterator, bool>
,因此您需要从某处创建或接收Trets
的实际对象可以将其插入std::map
。
【讨论】:
【参考方案2】:我认为这样的事情应该可行:
void Cjt_Trets::afegir_tret(int id, string rasgo)
auto it = mtrets.find(rasgo) ; // is rasgo already ion the map?
if (it == mtrets.end()) // if not insert an empty Trets
it = mtrets.insert(make_pair(rasgo, Trets()).first ;
// Now insert the id in the Trets referring to this rasgo
// TODO it->second is of type Trets and id is private member
// this needs to be fixed
it->second.id.insert(id) ;
【讨论】:
即使这样可以工作,代码也可以被压缩成只调用insert
,然后使用insert
的返回值来更新id。因此,无需调用find
并测试是否找不到该项目。以上是关于C++ 在 Map 中的类的一组值中插入一个值的主要内容,如果未能解决你的问题,请参考以下文章