簡體   English   中英

在 C++ 中初始化 class 的成員

[英]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 個問題:

  1. 我想根據OrderBookTypeOrderBook map 指定比較器。 以下是有效/良好的編程實踐嗎?
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;
}   
  1. 如何為 OrderPool 初始化一個空的map 為了確保OrderPool是一個空的無序 map,我是否必須執行以下操作:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM