簡體   English   中英

如何從std :: map返回值 <int, std::string> 使用uint64_t鍵類型?

[英]How to return a value from std::map<int, std::string> with a uint64_t key type?

新手問題,但我進行了搜索,找不到明顯解決我問題的方法-如果很明顯,我們深表歉意。

我定義了一個看起來像這樣的地圖:

map<int, string> testmap = {
    { 0, "a" },
    { 1, "b" },
    { 2, "c" }
}

但是,我需要使用另一個函數提供的uint64_t值從testmap檢索一個值。

當我執行testmap[my_uint64_t_value]它返回一個空字符串,所以我認為這是因為它將my_uint64_t_value添加為並將其設置為NULL

如果將映射類型設置為<uint64_t, string> ,至少在當前定義鍵的方式上,這是相同的。

但是,有沒有一種方法可以:

  1. uint64_t值轉換為常規int
  2. 將地圖定義為<uint64_t, string> ,並能夠將我的鍵定義為“正確”類型?

似乎int類型轉換並不常見,應該避免這種情況嗎?

得到空字符串的原因是std :: map :: operator [] 當且僅當該值存在時才返回對該值的引用,否則它將執行插入 我懷疑你有后一種情況。

您需要使用std :: map :: find進行搜索。

uint64_t keyToFind =  1;
if (auto iter = testmap.find(keyToFind); iter != testmap.cend()) 
{
   // do something
   std::cout << "Found!\n";
}
else { std::cout << "Not Found!\n"; }

就像注釋中提到的@Rene一樣,從uint64_tint可能導致溢出。 因此,將密鑰設為更大的類型(按要求)將是一個好主意。

std::map<uint64_t, std::string> testmap;

如另一個答案中所述,如果鍵不存在於映射中,則映射類的[]運算符將使用默認構造的值執行插入。

您可以先使用count方法來確定鍵,然后再訪問它。

if(testmap.count(keyToFind))
    return testmap[keyToFind];
else
    report_key_not_found();

另一種解決方案是使用at方法訪問值。 如果該鍵不存在,則將引發std::out_of_range異常,而不是插入新鍵。

暫無
暫無

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

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