c++ - 在 C++ 中使用 .find() 和 struct 作为映射中的键

标签 c++ struct find

我无法访问 BOOST 或 STL;我的结构和 map 看起来类似于以下伪装:

 struct s_map_key{
    int a;
    int b;
    bool operator<(const s_map_key& smk) const 
    {
        if (a < smk.a)       
        {            
            return true;
        } else if (a == smk.a)  
        { 
            if (b < smk.b) 
            { 
                return true;
            } 
            else if (b == smk.b)
            {
                return true;
            }
        } 
            return false;
    }
};

int main(int argc, char* argv[])
{

    std::multimap<s_map_key, std::string> myMap;
    for(int i = 0; i <10; i++)
    {
    s_map_key smk;
    smk.a = i;
    smk.b = 2;
    myMap.insert(std::make_pair(smk, "test"));
    }

    s_map_key smk;
    smk.a = 3;
    std::multimap<s_map_key, std::string>::iterator x = myMap.find(smk);
    if(x != myMap.end())
    {
        std::cout << x->first.a <<std::endl;
        std::cout << x->first.b <<std::endl;
    }
    return 0;
}

我想做的是在我的多重映射中搜索 A = 2、B = 2 或 A & B = 2 的所有情况。我不太确定,但我想我需要在我的结构中创建谓词对于“发现”。想法?

最佳答案

operator<这就是find所需要的或其他任何东西。但是,您的实现有一个错误。它返回 true如果操作数相等。

find和其他标准库组件使用 a == b iff ! (a < b) && ! (b < a) 的假设, 所以如果 ab相等,<必须是 false对于 find去工作。

        else if (b == smk.b)
        {
            return false; // was true
        }

关于c++ - 在 C++ 中使用 .find() 和 struct 作为映射中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655179/

相关文章:

ruby-on-rails - 我如何find()在某些字段中唯一的所有记录?

macos - 使用 sed 执行递归查找和替换仅更改第一个文件

php - 解码 C++ 编码的 ASCII 扩展值?

c++ - Boost.Asio SSL线程安全

c++ - QT如何将Qlist传递给类构造函数

c - 请求非结构或 union 中的成员 ‘a’

android - 当 `/sys/class/power_supply/battery` 不可读时 Android NDK 中的电池状态

c - 通过网络发送带有双指针的结构

c# - 结构可以从 C# 中的类派生吗?

ms-word - 如何以编程方式在整个 Word 文档中查找和替换