c++ - 如何从 C++ 中的自定义结构数据中获取特定元素?

标签 c++

现在我有:

struct vote
{
  int user; // ID of the user
  int item; // ID of the item
  float value; // Rating
};

typedef struct vote vote;

并且 testVotes 迭代此数据类型:

std::set<vote*> testVotes;

给定的testVotes指向的投票数据包含某个用户对某个item打分的信息。现在我想获取用户的项目,比方说,第一个用户(用户 id =1)还没有评价。

另外,由于这段代码是别人写的,已经有几千行了,我不想改变现有的结构。如何在不更改现有代码的情况下做我想做的事?

提前致谢!

----------------------------新需求---------------- ----------------------

给定一个已知元素用户 id 3 和另一个已知元素项目 id 5,我怎样才能得到对应的元素值 (3, 4, ?)?

最佳答案

如果为单个特定用户寻找解决方案,函数可以构建 std::set他/她评价的所有项目:

std::set<int> rated_items(int user) {
    std::set<int> result;
    for (auto p : testVotes) {
        if (p->user == user) result.insert(p->item);
    }
}

但是,如果您需要为所有用户执行此操作,那么构建一个从用户到评分项目的单一映射会更有效:

std::map<int, std::set<int>> rated_items() {
    std::map<int, std::set<int>> result;
    for (auto p : testVotes) {
        result[p->user].insert(p->item);
    }
}

知道用户对哪些项目进行了评分,就可以轻松了解用户未对哪些项目进行评分。

PS:数据结构std::set<vote *>看起来是一个非常有问题的选择(std::set<vote> 似乎更合理,或者 std::vector<vote> 如果同一个用户可以多次评价同一个项目)。 与糟糕的数据结构永远生活的悲伤相比,已经编写的数千行算不了什么。

关于c++ - 如何从 C++ 中的自定义结构数据中获取特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244361/

相关文章:

c++ - 二维旋转opengl

c++ - 如何从 pimpl 类调用调用者类的复制构造函数?

c++ - 如何在空格后打印字符串的其余部分

c++ - 有与 cudaHostGetDevicePointer() 相反的东西吗?

c++ - 访问修饰符在继承中的不同行为取决于 "this"关键字和模板或缺少它们

c++ - 为什么我们在这个例子中同时需要 const 和非常量 getter

c++ - 使用 UTF8

带路由器的 C++ 套接字

c++ - 在C/C++中检测签名溢出

检查可变参数模板中没有重复类型的 C++ 概念