我知道,一旦聲明,就無法更改地圖的順序。相反,我在一個結構試圖這樣:取決於輸入值對std :: map的排序順序
struct MyStruct
{
std::map<int, double>* my_map;
MyStruct(bool dir)
{
if(dir)
{
my_map = new std::map<int, double, std::less<int> >;
}
else
{
my_map = new std::map<int, double, std::greater<int> >;
}
}
}
這不是工作,並抱怨說,我改變了else
條件下的類型。有沒有解決的辦法?我能想到的唯一方法是編寫我自己的比較器並創建一個封裝bool dir
的對象,這似乎是多餘的。
是在編譯時知道你是否希望'less'或'greater'?或僅在運行時? –
@JosephMansfield只在運行時不幸。 – Joshua
我想你將不得不編寫自己的比較器。但是,別人可能有更好的主意。但是在旁註中:如果你想編寫適當的C++,將映射封裝在'std :: unique_ptr'中,並使用(如果在編譯器中可用)'std :: make_unique'來創建映射。這樣你就不必在意在析構函數中釋放映射。 – Excelcius