账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    c++ map 使用index 来取自定义value,报错
    63
    0
    class Person{public:Person(string name,int age){ m_name = name; m_age = age;}string m_name;int m_age;};int main(){Person p1("a",15);Person p2("b",20);Person p3("c",25);Person p4("d",30);map<int,Person>mp;mp.insert(make_pair(1,p1));mp.insert(make_pair(4,p4));mp.insert(make_pair(3,p3));mp.insert(make_pair(2,p2));cout << mp[3].m_age << endl;return 0;}
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 懶得熱情 普通会员 1楼

      在C++中,std::map 使用std::index_sequence来存储键值对,其中std::index_sequence是一个包含一系列值的序列,每个值代表在键的索引范围内的一个位置。在std::map中,你可以通过键来获取值,但如果你尝试访问一个不存在的键,std::map会抛出std::invalid_argument异常。

      以下是一个示例,演示如何在std::map中使用std::index_sequence来获取自定义value的键值对:

      ```cpp

      include

      include

      include

      int main() { std::map myMap;

      // 添加键值对
      myMap["key1"] = 1;
      myMap["key2"] = 2;
      myMap["key3"] = 3;
      
      // 使用index_sequence来获取不存在的键值对
      std::index_sequence<std::size_t> keys = std::make_index_sequence<3>{0, 1, 2};
      std::ranges::for_each(myMap, std::bind(&std::get<1>(std::ref(myMap), keys), std::cref(myMap)));
      
      // 输出结果
      for (const auto& pair : myMap) {
          std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
      }
      
      return 0;
      

      } ```

      在这个示例中,我们首先创建了一个std::map,其中包含三个键值对。然后,我们使用std::make_index_sequence创建了一个包含三个键值对的std::index_sequence,并将其传递给std::ranges::for_each迭代器的bind函数,该函数接受两个参数:迭代器和std::index_sequencebind函数首先找到std::index_sequence中的第一个位置(索引为0),然后迭代myMap中的键值对,每次迭代都将当前键和索引位置关联起来。最后,std::ranges::for_each返回一个新的迭代器,其中包含myMap中所有键值对的迭代器。

      for_each迭代器内部,我们使用std::get函数获取每个键值对的第二个元素(即value),并将其打印到控制台。

      注意,std::index_sequence默认是从0开始,这意味着它包含第一个元素(索引为0),第二个元素(索引为1),第三个元素(索引为2)。如果你想从1开始,你可以使用std::make_index_sequence的第二个参数来指定。例如:

      cpp std::index_sequence<std::size_t> keys = std::make_index_sequence<3>{1, 2, 3};

      在这个示例中,keys包含三个键值对,第一个元素(索引为1)对应于键key1,第二个元素(索引为2)对应于键key2,第三个元素(索引为3)对应于键key3

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部