簡體   English   中英

有沒有辦法從地圖上獲取特定的鍵值對?

[英]Is there a way to get a specific key-value pair from the map?

我目前正在學習有關STL中的地圖的信息。 我想知道如何從地圖上獲取特定的鍵值對。 例如,下面地圖中的第三個鍵值對。 'C'-> 1

    'A'-> 1
    'B'-> 1
    'C'-> 1
    'D'-> 1
    'E'-> 2

是的,我們可以訪問地圖的“第三個鍵值對”,但這不是很簡單。 我們需要在地圖的開頭獲得一個迭代器,然后將其前進兩次(請注意,在更通用的代碼中,您應先檢查地圖是否具有適當的大小,然后再執行類似的操作)

std::map<char, int> my_map;
my_map['C'] = 3;
my_map['A'] = 1;
my_map['B'] = 2;

auto begin = my_map.begin();
std::advance(begin, 2);
std::cout << begin->first << " : " << begin->second << std::endl;

輸出:

C:3

現場演示

請注意,第3個元素實際上是我們插入的第一個鍵值對。 這是因為鍵是按排序順序插入的。

如果我對您的理解正確,則需要類似

#include <iostream>
#include <map>
#include <iterator>


int main()
{
    std::map<char, unsigned int> m = 
    {
        { 'A', 1 }, { 'B', 1 }, { 'C', 1 }, { 'D', 1 }, { 'E', 2 }
    };

    auto it = std::next( std::begin( m ), std::min<decltype( m )::size_type>( m.size(), 2 ) );

    if ( it != std::end( m ) )
    {
        std::cout << it->first << ": " << it->second << '\n';
    }

    return 0;
}

程序輸出為

C: 1

也就是說,您可以將操作與迭代器一起使用。

或者也許您只需要使用類的方法find ,例如

#include <iostream>
#include <map>
#include <iterator>


int main()
{
    std::map<char, unsigned int> m = 
    {
        { 'A', 1 }, { 'B', 1 }, { 'C', 1 }, { 'D', 1 }, { 'E', 2 }
    };

    auto it = m.find( 'C' );

    if ( it != std::end( m ) )
    {
        std::cout << it->first << ": " << it->second << '\n';
    }

    return 0;
}

程序輸出再次是

C: 1

暫無
暫無

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

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