簡體   English   中英

初始化靜態2D數組

[英]Initializing static 2D array

下面的代碼:

enum Type {Prince, Princess, King, Queen, NumTypes};
enum Country {England, Belgium, Netherlands, NumCountries};

class Factory {
    static const std::array<std::array<int, NumTypes>, NumCountries> probabilities;
    static std::array<std::array<int, NumTypes>, NumCountries> initializeProbabilities() {
        std::array<std::array<int, NumTypes>, NumCountries> p;
        p[England] =     {29, 60, 80, 100};
        p[Belgium] =     {31, 66, 81, 100};
        p[Netherlands] = {25, 45, 90, 100};
      return p;
    }
};
const std::array<std::array<int, NumTypes>, NumCountries> Factory::probabilities = initializeProbabilities();

如果我曾經更改enum Country中元素的順序是安全的,但是將來對enum Type元素進行任何重新排序都不安全。 避免一個接一個地初始化所有12個元素的最佳方法是什么?

為了避免對訂單的依賴性,您應該編寫如下內容:

p[England][Prince]=29;
p[England][Princess]=60;
p[England][King]=80;
p[England][Queen]=100;

p[Belgium][Prince]=31;
p[Belgium][Princess]=66;
p[Belgium][King]=81;
p[Belgium][Queen]=100;

這是Brian提出的解決方案(我想這就是他的意思)。 這可能是解決所描述問題的最佳方法嗎?

enum Type {Prince, Princess, King, Queen, NumTypes};
enum Country {England, Belgium, Netherlands, NumCountries};

class Factory {
    static const std::array<std::map<Type, int>, NumCountries> probabilities;
    static std::array<std::map<Type, int>, NumCountries> initializeProbabilities() {
        std::array<std::map<Type, int>, NumCountries> p;
        p[England] =     { {Prince, 29}, {Princess, 60}, {King, 80}, {Queen, 100} };
        p[Belgium] =     { {Prince, 31}, {Princess, 66}, {King, 81}, {Queen, 100} };
        p[Netherlands] = { {Prince, 25}, {Princess, 45}, {King, 90}, {Queen, 100} };
        return p;   
    }
};
const std::array<std::map<Type, int>, NumCountries> Factory::probabilities = initializeProbabilities();

也許他是指地圖的地圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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