c++ - 带字符串或结构键的 std::map

标签 c++ boost-serialization

如何在 C++ 中内存映射 struct 或 string 类型的键值的 std:map? 这样可以吗?现在我正在使用键值 int 的映射进行内存映射,但由于 int 的最大范围是有限的,并且我的程序中键值的最大大小约为 10^24,所以我陷入了困境。那么通过使用键类型作为结构或字符串我可以解决这个问题吗?

 int p0, p1, p2;
map<int,int> p0obj, p1obj, p2obj, size_p; int count = 0; 

                    float d0, d1, d2;                      
                    float a0 = a[p0];  
                    float b0 = b[p0]; 
                    float a1 = a[p1]; 
                    float b1 = b[p1];
                    float a2 = a[p2]; 
                    float b2 = b[p2];
                    if(d0>0 && d1>0 && d2>0) {
                        int key = d0+max_d*(d1+max_d*(d2+max_d*(a0+max_c*(b0+max_c*(a1+max_c*(b1+max_c*(a2+max_c*b2)))))));
        //std::string key = std::to_string(k);
                        p0obj[key] = p0; p1obj[key] = p1; p2obj[key] = p2; size_p[key]++;
                        oa << p0obj; oa << p1obj; oa << p2obj; oa << size_p;
                        std::cout<<"key="<<key<<std::endl;
                    }
                } 
            } 

最佳答案

您似乎想使用一堆 float 作为 map 中的键。

您可以通过将它们包装为 tuple 来做到这一点或者定义一个更有意义的struct类型:

#include <map>

struct MyKey {
    float d0, d1, d2, a0, b0, a1, b1, a2, b2;

    bool operator < (const MyKey& o) const {
        return std::tie(d0, d1, d2, a0, b0, a1, b1, a2, b2) < std::tie(o.d0, o.d1, o.d2, o.a0, o.b0, o.a1, o.b1, o.a2, o.b2);
    }
};

struct MyValue {
    float p0, p1, p2;
};

std::map<MyKey, MyValue> pobj;

插入此 map :

    pobj.insert({{d0, d1, d2, a0, b0, a1, b1, a2, b2}, {p0, p1, p2}});

但是不确定您会用这样的 map 做什么。通过 float 搜索可能效果不佳。但是用例如查找子空间lower_bound可能仍然有用。

    auto it = pobj.lower_bound({d0, d1, d2, a0, b0, a1, b1, a2, b2});
    if (it != end(pobj)) {
        const MyKey& key = it->first;
        const MyValue& value = it->second;
        std::cout << "found: " << value.p0 << " " << value.p1 << " " << value.p2 << std::endl;
    }

关于c++ - 带字符串或结构键的 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589044/

相关文章:

c++ - 升压:Serialization: Who cleans up the deserialized data?

c++ - std::swap between std::shared_ptr<A> 其中 A 具有动态数组

c++ - 当 QSortFilterProxyModel 过滤 QTreeView 中的项目时,如何自动展开该项目?

c++ - 如何在 MSVC 2005 中手动修饰链接器名称?

c++ - 通过指针反序列化时,boost::serialization如何分配内存?

c++ - Boost.serialization 未注册类异常与运行时链接共享库中定义的序列化类

C++ : why is my average returning as an int and not a double?

c++ - 在函数中定义结构体数组

Boost error "Structure has no member named ' serialize'”虽然结构已经序列化

c++ - boost 序列化: how to choose version at runtime?