[英]Initialize members of a class in C++
我有一個帶有以下聲明的 class:
class OrderBook {
std::string OrderBookType;
std::map<double, vector<float*>> OrderBookData;
std::unordered_map<int, float*> OrderPool;
public:
OrderBook(string);
}
關於 class 初始化,我有 2 個問題:
OrderBook::OrderBook(string bookType) {
OrderBookType = bookType;
if (bookType == 'B') {
OrderBookData = std::map<float, vector<float*>, std::greater<float>>
}
else {
OrderBookData = std::map<float, vector<float*>, std::less<float>>
}
OrderPool;
}
OrderPool = std::unordered_map<int, float*>()
或者是OrderPool;
充足的?
到 1。
不,它無效。
類型
std::map<float, vector<float*>, std::greater<float>>
和
std::map<float, vector<float*>, std::less<float>>
是不同的。 您不能在運行時更改類型。
恕我直言,最好的方法是創建一個自己的比較器,該比較器需要一個參數並傳遞給 map 的構造函數(如問題評論中所述)。
class Comp {
public:
Comp(bool greater) : g(greater) {}
bool operator()(double lhs, double rhs) const {
if (g) return lhs > rhs;
return lhs < rhs;
}
private:
bool g;
};
struct OrderBook {
std::string OrderBookType;
std::map<double, std::vector<float*>, Comp> OrderBookData;
std::unordered_map<int, float*> OrderPool;
public:
OrderBook(const std::string &);
};
OrderBook::OrderBook(const std::string &bookType) : OrderBookType(bookType), OrderBookData(Comp(bookType == "B")) {}
到 2。
std::unordered_map<int, float*> OrderPool;
將被初始化為空的無序 map。 線
OrderPool;
什么也沒做。
你不需要(從技術上講你不能)再次初始化它。 如果要清除 map 可以使用std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::clear
您還可以創建一個新的 object 並將其分配給
OrderPool = std::unordered_map<int, float*>()
但是我更喜歡
OrderPool.clear();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.