【问题标题】:Is there a way to get a specific key-value pair from the map?有没有办法从地图中获取特定的键值对?
【发布时间】:2019-05-28 14:09:34
【问题描述】:

我目前正在学习 STL 中的地图。我想知道如何从地图中获取特定的键值对。例如,下图中的第三个键值对。 'C'-> 1

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

【问题讨论】:

  • 你想怎么得到它?构建地图的目的是为您提供与键相关的值。
  • @AndyG 我能拿到第三把钥匙吗? C 还是不可能?

标签: c++ dictionary stl iterator


【解决方案1】:

是的,我们可以访问地图的“第三个键值对”,但这不是很简单。我们需要在地图的开头获取一个迭代器,然后将其推进两次(注意,在更通用的代码中,您应该在执行此类操作之前检查地图的大小是否合适)

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

Live Demo

请注意,第三个元素实际上是我们插入的第一个键值对。这是因为键是按排序顺序插入的。

【讨论】:

  • 请注意,如果您不想通过密钥访问数据,则应考虑使用其他更准确的容器。 Here你可以找到一个图表,这将有助于为这种情况选择一个准确的容器。
  • 非常感谢。我现在已经掌握了窍门。
【解决方案2】:

如果我对你的理解正确,你需要类似的东西

#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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多