C++ 用std::generate\u n填充std::map
我想使用C++ 用std::generate\u n填充std::map,c++,c++11,dictionary,C++,C++11,Dictionary,我想使用std::generate\n填充std::map,但无法使其工作。我尝试的是以下几点: unsigned number_of_pairs{5}; std::map<std::string, std::string> my_map; auto read_pair_from_input = [](){ std::string key; std::getline(std::cin, key); std::string value; std::get
std::generate\n
填充std::map
,但无法使其工作。我尝试的是以下几点:
unsigned number_of_pairs{5};
std::map<std::string, std::string> my_map;
auto read_pair_from_input = [](){
std::string key;
std::getline(std::cin, key);
std::string value;
std::getline(std::cin, value);
return std::make_pair(key, value);
};
std::generate_n(my_map.begin(), number_of_pairs, read_pair_from_input);
u对的无符号数{5};
映射我的地图;
从\u输入自动读取\u对=[](){
std::字符串键;
std::getline(std::cin,key);
std::字符串值;
std::getline(std::cin,value);
返回std::make_对(键、值);
};
std::generate_n(my_map.begin(),对的数量,从输入中读取对);
这给了我很长的错误,比如:
In file included from /opt/wandbox/gcc- head/include/c++/8.0.0/algorithm:62:0,
from prog.cc:1:
/opt/wandbox/gcc-head/include/c++/8.0.0/bits/stl_algo.h: In instantiation of '_OIter std::generate_n(_OIter, _Size, _Generator) [with _OIter = std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> > >; _Size = unsigned int; _Generator = main()::<lambda()>]':
prog.cc:18:74: required from here
/opt/wandbox/gcc-head/include/c++/8.0.0/bits/stl_algo.h:4468:11: error: use of deleted function 'std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator= (typename std::conditional<std::__not_<std::__and_<std::is_copy_assignable<_Tp>, std::is_copy_assignable<_T2> > >::value, const std::pair<_T1, _T2>&, const std::__nonesuch_no_braces&>::type) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = std::__cxx11::basic_string<char>; typename std::conditional<std::__not_<std::__and_<std::is_copy_assignable<_Tp>, std::is_copy_assignable<_T2> > >::value, const std::pair<_T1, _T2>&, const std::__nonesuch_no_braces&>::type = const std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >&]'
*__first = __gen();
~~~~~~~~~^~~~~~~~~
In file included from /opt/wandbox/gcc-head/include/c++/8.0.0/utility:70:0,
from /opt/wandbox/gcc-head/include/c++/8.0.0/algorithm:60,
from prog.cc:1:
/opt/wandbox/gcc-head/include/c++/8.0.0/bits/stl_pair.h:378:7: note: declared here
operator=(typename conditional<
^~~~~~~~
在/opt/wandbox/gcc-head/include/c++/8.0.0/algorithm:62:0中包含的文件中,
从程序cc:1:
/opt/wandbox/gcc-head/include/c++/8.0.0/bits/stl_-algo.h:在“_-OIter std::Generator_-n”(_-OIter,_-Size,_-Generator)[with-OIter=std::_-Rb_-tree_迭代器;_-Size=unsigned int;_-Generator=main():]”的实例化中:
进度cc:18:74:此处需要
/opt/wandbox/gcc-head/include/c++/8.0.0/bits/stl_-algo.h:4468:11:错误:使用删除的函数'std::pair&std::pair::operator=(typename std::conditional::type)[with _T1=const std:u cx11::basic_string;_T2=std::u cx11::basic_string;typename std::conditional::type=const::std::pair&]
*__第一个=_gen();
~~~~~~~~~^~~~~~~~~
在/opt/wandbox/gcc head/include/c++/8.0.0/utility:70:0中包含的文件中,
从/opt/wandbox/gcc head/include/c++/8.0.0/算法:60,
从程序cc:1:
/opt/wandbox/gcc-head/include/c++/8.0.0/bits/stl_-pair.h:378:7:注意:此处声明
运算符=(typename条件)<
^~~~~~~~
是否可以用std::generate\n
填充std::map
?您需要的是:
inserter
将把您的映射
包装成一个类似迭代器的结构,std::generate\n
可以使用它
可以像这样实现
template< class OutputIt, class Size, class Generator >
OutputIt generate_n( OutputIt first, Size count, Generator g )
{
for( Size i = 0; i < count; i++ ) {
*first++ = g();
}
return first;
}
template< class OutputIt, class Size, class Generator >
OutputIt generate_n( OutputIt first, Size count, Generator g )
{
for( Size i = 0; i < count; i++ ) {
*first++ = g();
}
return first;
}
std::generate_n(std::inserter(my_map, my_map.begin()), number_of_pairs, read_pair_from_input);