【发布时间】:2015-02-03 16:58:03
【问题描述】:
我正在尝试提供带有需要静态数据的比较器的地图。但是,以下方法失败了,因为(我的编译器告诉我)C++ 不接受静态构造函数:
struct MyOrder {
static std::map<std::string, int> m_specialOrder;
static MyOrder() {
m_specialOrder["First"] = 1;
m_specialOrder["Second"] = 2;
m_specialOrder["Third"] = 3;
}
bool operator() (const std::string& a, const std::string& b)
{
std::map<std::string, int>::iterator x = m_specialOrder.find(a);
if(x == m_specialOrder.end()) return false;
std::map<std::string, int>::iterator y = m_specialOrder.find(b);
if(y == m_specialOrder.end() || x->second < y->second) return true;
return false;
}
};
我想要静态构造之类的东西,因为我只需要 m_specialOrder 映射的一个实例,而且我不希望每次使用比较器或定义使用它的映射时都对其进行初始化。
我的目标是能够在如下地图上使用我的特殊排序:
std::map<std::string, double, MyOrder> mySpecialMap;
我怎样才能做到这一点?
【问题讨论】:
-
你为什么要让你的构造函数变成静态的?
-
我希望您不要考虑在地图处于活动状态时更改比较功能中的静态数据。更改地图中键的顺序会严重破坏地图。
-
正如错误所暗示的,
static构造函数在 C++ 中没有意义。你想在那里做什么? -
不,不想更改静态数据。我只是想防止数据在每次使用该结构时被重新实例化。在问题中添加了一段来澄清这一点。
标签: c++ stl comparator