C++ 如何将std::map的前N个元素复制到另一个map?

C++ 如何将std::map的前N个元素复制到另一个map?,c++,c++11,map,stl,std,C++,C++11,Map,Stl,Std,我想将std::map的前N个元素复制到另一个map。我试着抄袭,但惨遭失败。我怎样才能做到这一点 #include <iostream> #include <map> #include <algorithm> #include <iterator> using namespace std; int main(){ map<int,int> Map; for ( int i=0;i<10;i++) Map[i]=i*i;

我想将std::map的前N个元素复制到另一个map。我试着抄袭,但惨遭失败。我怎样才能做到这一点

#include <iostream>
#include <map>
#include <algorithm>
#include <iterator>
using namespace std;
int main(){
  map<int,int> Map;
  for ( int i=0;i<10;i++) Map[i]=i*i;
  map<int,int> Map2;
  std::copy_n(Map.begin(), 5,  Map2.end());
  return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
地图;

对于(int i=0;i使用
copy\n
?它的工作原理如下:

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

int main() {
    std::map<int, int> m1 { { 1, 2 }, { 2, 9 }, { 3, 6 }, { 4, 100 } }, m2;
    std::copy_n(m1.begin(), 2, std::inserter(m2, m2.end()));

    for (auto const & x : m2)
        std::cout << x.first << " => " << x.second << "\n";
}
#包括
#包括
#包括
#包括
int main(){
地图m1{{1,2},{2,9},{3,6},{4100},m2;
std::copy_n(m1.begin(),2,std::inserter(m2,m2.end());
用于(自动常数和x:m2)

std::cout如果您从头开始构建另一个映射,只需将它所需的迭代器传递给构造函数:

std::size_t n = ...;

std::map<K, V> m1 = { ... };
std::map<K, V> m2(m1.begin(), std::next(m1.begin(), n));
std::size\u t n=。。。;
std::map m1={…};
std::map m2(m1.begin(),std::next(m1.begin(),n));

如果要创建新映射,可以使用范围构造函数。可以使用范围std::map::insert插入现有映射

// copy 3 elements from map source
std::map<K,V>::iterator first = source.begin();
// can also use std::next if available
std::map<K,V>::iterator last = source.begin();
std::advance(last, 3);

std::map<K,V> m1( other.begin(), last);
m1.insert(first, last);
//从映射源复制3个元素
std::map::iterator first=source.begin();
//如果可用,也可以使用std::next
std::map::iterator last=source.begin();
标准:预付款(最后,3);
std::map m1(other.begin(),last);
m1.插入(第一个,最后一个);

std::copy也可以使用,但是您必须使用std::inserter作为输出迭代器。

即使您认为自己失败得很惨,也请在问题中发布代码的相关部分。否则,我们无法确定您失败得有多惨。您必须发布
std::copy\n
代码,这样我们才能了解您的失败情况这是我的代码。我得到的
copy\n没有在作用域中声明
@user1159517您使用的编译器是什么?诀窍是使用
inserter
std::copy\n
不会为您插入元素。+1因为这是正确的方法,即使它不是OP的X的Y。很好,但不是吗
m1
的片段可以迭代两次吗?@pmr是的,会的。但是,除非它对性能特别敏感,否则我不会真的担心它。