2011-10-27 71 views
1

我有一個美國各州的列表以及各種屬性,並且在具有各種屬性的這些城市中,這些都需要在啓動時動態地創建,目前是從文本文件中創建的。類是保存這些數據C++的最佳方式嗎?

在蟒蛇,用略微沙啞的語法可讀性,我會用字典矩陣(這聽起來很可怕),它可以表示這樣的事情:

locations = { 
    "Alabama": { 
     "url" : "www.domain.com/page.php", 
     "users": 8 
     "cities" : { 
      "city1": { 
       "url" : "www.domain.com/page.php", 
       "users": 2 
      } 
      "city2": { 
       "url" : "www.domain.com/page.php", 
       "users": 1 
      } 
     } 
    } 
} 

我可以用一個類,當然,但它的真的沒有必要只是爲了代表它;在Python這樣的小列表中,字典會更有用,我目前沒有計劃需要類或數據庫的額外功能。會有更多的細節,當然還有所有的州,可能每個州有0-10個城市/地區,但總體而言相對較小。

在C++中,我可以用嵌套的unordered_map來實現類似的事情,但是有一件事我不能將數據類型與無序映射混合,因此「用戶」必須是一個字符串而不是int(和I我沒有意識到更合適的內置類型),但我可以很容易地通過使用字符串做大多數事情,但是讓我來問這個問題的是創建標頭聲明時,我很快意識到它看起來非常難看,可讀。當它創建爲fwiw時,它將會是一個常量,否則我只是像python一樣創建它。儘管我並不總是跟着他們,但我主要是在這裏尋找最佳實踐建議,應該如何我代表這些數據,如果我獲得了評分或以其他方式發佈它?

+0

我會讓'城市'一個數組。 – Pablo

回答

0

爲什麼不以JSON或XML格式存儲它並獲取JSON或XML閱讀器庫?

+0

除了安裝額外的庫有時會吸引有時 – Nacht

+0

存儲它,但是你想要的,JSON看起來不錯,但原始問題不是解析文件,而是關於如何用對象表示數據。 – mergeconflict

+0

如何存儲它是問題的一部分,因爲他評論了代表的醜陋。 – Nacht

4

假設State總是具有相同的字段(url,userscities),最好爲它創建一個類。與City一樣。然後,你將最終之一:

  • map<string, State>您的位置,並在每個國家的城市中map<string, City>,或...
  • set<State>您的位置(其中Statename場由它的索引)和set<City>爲每個州的城市(再次,每個name字段)。

你想養成讓系統爲你工作的習慣儘可能多。

+0

關於'set'的一個注意事項是:它們具有防止包含對象發生變化的不幸屬性。對於屬性,它可能不是一個問題(假設這些屬性不會改變),但對於用戶數量,例如,它可能很煩人。 –

+0

關於std :: set的更多信息是它只存儲唯一元素,如果一個州包含兩個具有相同名稱和類的城市,則會出現問題城市將其名稱用作索引。 –

0

總之:是的。你想要爲你的城市和州制定一個課程。

您可能想要做一些事情,例如爲每個州和城市分配一個唯一的ID。 該ID可能是快速查找數組的索引。

然後,您可以輕鬆地讓每個城市通過ID來跟蹤它是哪個州的成員。

這應該是如何組織它的好起點,因爲你真的只是問了一個是/否的問題。
其餘部分留給讀者閱讀。 (這真的很罕見,一個人得到合法地說,在一個答案)

相關問題