修改unordered_set中的值
Modify value in unordered_set
我有以下结构:
struct User
{
string name;
bool flag;
int score;
bool operator==(const User& user) const
{
return name == user.name;
}
}
namespace std {
template<>
struct hash<User>
{
size_t operator()(const User& user) const
{
return hash<string>{}(user.m_nickname);
}
};
}
之后,我想将用户与unordered_set容器一起使用,但是在阅读了另一个数据后,我想修改用户分数 flag等,因此不会影响哈希值,因为我知道所有用户都将事先拥有唯一的名称。
在我的程序中,我使用类似的东西:
unordered_set<User> set;
while(true)
{
User user = *set.find({name});
user.score++;
}
但是,在我的用户对象不范围之后,我发现更多的时间值与修改之前的时间值相同。我如何解决这个问题,也许我应该使用其他容器?我之所以选择这个是因为O(1(复杂性。
在unordered_set<>
中,每个对象的值是其键。因此,对象无法更改。
您可以解决这个问题的一种方法是使非钥匙成员可变。
也就是,更改
bool flag;
int score;
to
mutable bool flag;
mutable int score;
另外,您正在修改副本。
更改
User user = *set.find({name});
to
auto &user = *set.find({name});
使用映射, unordered_map
,其中键是名称,值为用户。
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 使用运算符调用 void 函数时出错<set>
- 修改"std::set"中用户定义类型的值
- 生成提升::hana::set 的常量表达式问题
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- 重构使用动态强制转换的 std::set 的比较运算符
- set::find 查找不存在的元素
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- 将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法
- 错误 C2676:std::set::const_iterator 没有运算符 + 函数?
- std::set 是否将对象连续存储在内存中?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- google test PrintTo for std::set<std::string>