C++ STL映射比较器能否以某种方式获得映射本身的指针?

C++ STL映射比较器能否以某种方式获得映射本身的指针?,c++,stl,C++,Stl,STL映射比较器能否以某种方式获得映射本身的指针或任何其他外部参数,以及被比较值的指针 我想使用STL映射作为一些二进制数据的索引,这些二进制数据由可变长度的记录组成,我更希望只在映射中存储偏移量,比较器使用这些偏移量查找实际值 但是为了使其工作,比较器需要知道要添加偏移量的数据块的基址。使用指针而不是偏移量不是一个选项,因为数据块可以在内存中移动。所以我更愿意将这个基本指针存储在std::map的子类中,并在comparator中检索它。为此,比较器必须知道map对象的地址。这可能吗 我知道我

STL映射比较器能否以某种方式获得映射本身的指针或任何其他外部参数,以及被比较值的指针

我想使用STL映射作为一些二进制数据的索引,这些二进制数据由可变长度的记录组成,我更希望只在映射中存储偏移量,比较器使用这些偏移量查找实际值

但是为了使其工作,比较器需要知道要添加偏移量的数据块的基址。使用指针而不是偏移量不是一个选项,因为数据块可以在内存中移动。所以我更愿意将这个基本指针存储在std::map的子类中,并在comparator中检索它。为此,比较器必须知道map对象的地址。这可能吗

我知道我可以在每个映射键中包含一个指向映射对象的指针,但这会浪费内存。有没有更直接的方法


谢谢

如评论中所述,您可以通过捕获lambda来实现这一点,例如:

#include <map>

struct map_data {};

int main ()
{
    map_data md;
    auto comparator = [&md] (int lhs, int rhs) { return lhs < rhs; };
    std::map <int, int, decltype (comparator)> my_map (comparator);
    my_map.find (5);
}

二进制数据的基址在lambda via&md中可用。

我不太明白您想要实现什么,尽管我更不明白指向映射的指针会有什么帮助。如果您知道如何在每个键中包含指向映射的指针,那么可以将其作为示例编写,目前的问题是,您希望在映射中存储偏移量,而不是指针。因此,比较器需要一个额外的参数基址来比较指定偏移量处的值。如何将额外的参数输入比较器?是的,这很容易实现。使用lambda或只使用运算符重载的类来存储所需的基址。自由函数不能很好地做到这一点,不是以线程安全/可重入的方式。此外,请不要将std::map子类化。听起来您可能只是想编写自己的容器接口,拥有一个std::map。即使你想出了一个聪明的方法来避免这种情况,想想下一个需要尝试理解你做了什么或为什么做的人。