gpt4 book ai didi

c++ - setField() 中的类更改未保留

转载 作者:行者123 更新时间:2023-11-30 04:07:42 25 4
gpt4 key购买 nike

我有一个类,如果它被正确插入到一个集合中,我正试图为其设置一个值。这是那个类。

class flow {
std::string source, dest, protocol, startTime; //
public:
flow() {}
flow(std::string & s, std::string & d, std::string p) :
source(s), dest(d), protocol(p) {}
bool operator==(const flow& rhs) const;
bool operator<(const flow& rhs) const;
bool setFields(std::string &, std::string &, std::string &);
std::string getSource() const;
std::string get_startTime() const;
//other getters not shown
void set_startTime(std::string &);
//other setters not shown
virtual ~flow();
std::string createKey() const;
};

bool flow::setFields(std::string & srcArg, std::string & destArg,
std::string & protocolArg) {
source = srcArg;
dest = destArg;
protocol = protocolArg;
return true;
}


void flow::set_startTime(std::string & a) {
startTime = a;
}

这个类我有一套set<flow> flows; .我将这个流程插入到一个集合中。如果插入失败,我知道我已经在跟踪这个流程,但如果不是,我想设置它的开始时间。

flow currentFlow;
//...
protocol = string("TCP");
currentFlow.setFields(source, dest, protocol);
key = createKeyFromFlow(currentFlow);
ret = flows.insert(currentFlow); // see if we can insert this flow
if (ret.second == false) {
inserted = false;
// we failed to insert
it = ret.first; // "it" now points to element already in the set
} else {
string stringTS;
std::stringstream strstream;
//convert to string and store
strstream << currentTimeStamp;
strstream >> stringTS;
cout << stringTS << endl;
currentFlow.set_startTime(stringTS);
//sanity check to assert the value was set
cout << currentFlow.get_flow() << endl;
}

健全性检查通过,值被打印出来。但是,稍后当我显示这些流程时,不再设置该值。我怎样才能坚持这个值(value)?这个 currentFlow 与我的集合中持久存在的流不一样吗?

如果您需要更多信息,请告诉我,我不想发布太多代码,但足以诊断问题。

最佳答案

问题是 set::insert 创建了流对象的拷贝。因此,您在

之后对 currentFlow 所做的任何更改
 ret = flows.insert(currentFlow); 

对实际存储在集合中的对象没有影响。

编辑:正如 Matt McNabb 在下面提到的,人们应该意识到这个问题不能通过简单地修改存储在流集中的拷贝来解决,因为这会使它的 key 无效(例如阅读 what happens when you modify an element of an std::set? 以获取更多信息)

关于c++ - setField() 中的类更改未保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22263737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com