c++ - 将字符串集合中的元素添加到字符串集合的向量
问题描述
我想为下面的练习做一个操作,我试图将一组字符串中的一个元素添加到一组字符串的向量中。
#include <iostream>
#include <set>
#include <vector>
int main() {
std::set<std::string> remaining_cards = {"2S", "3S", "4S", "5S", "6S"};
std::vector<std::set<const std::string>> player_cards;
int random_number;
random_number=2;
auto it = remaining_cards.cbegin();
std::advance(it, random_number);
std::cout << *it << std::endl;
// add one element to a vector of sets of strings from set of strings
player_cards.emplace_back(*it);
// remove that element from the original set
remaining_cards.erase(it);
return 0;
}
我有以下问题:
- 为什么我会收到错误消息
::const_reference = const std::basic_string<char>&]' cannot be overloaded.
- 我试图
const
从player_cards
声明中删除,但后来我得到了no matching function for call to 'std::set<std::basic_string<char> >::set(const std::basic_string<char>&)
- 什么
emplace_back(*it);
时候it
必须取消引用? - 我怀疑我的问题源于我试图将集合中的一个元素放入字符串集合的向量中。我是否需要首先创建迭代器指向的元素的集合?我假设它只指向一个字符串。
- emplace_back 没有直接创建集合的能力吗?
- 我可以做类似的事情吗
emplace_back(std::set(*it));
由于我是 C++ 新手,因此上述所有内容可能在概念上是错误的,但我试图了解将元素从集合添加到集合向量的最佳方法是什么。它似乎比预期的要复杂。
解决方案
- 为什么我会收到错误消息
::const_reference = const std::basic_string<char>&]' cannot be overloaded.
因为您正在尝试使用一组 const。const 类型不满足std::set
. 改为使用std::vector<std::set<std::string>>
。
- 我试图从 player_cards 声明中删除 const 但后来我得到了
no matching function for call to 'std::set<std::basic_string<char> >::set(const std::basic_string<char>&)
it
是一个指向 a 的迭代器std::string
。如果您查看 的构造函数std::set
,您会发现它没有将字符串作为参数的构造函数。
有一个构造函数采用std::initializer_list
. emplace_back
不幸的是,由于复杂的原因,它不能直接使用。但它可以与辅助变量一起使用:
auto init = {*it};
player_cards.emplace_back(init);
- 当我这样做时
emplace_back(*it);
,它必须被取消引用吗?
鉴于既不工作emplace_back(*it);
也不emplace_back(it);
工作,这个问题有点不清楚。您必须通过迭代器间接访问指向的元素。如果您不需要访问指向的元素,那么您不需要通过迭代器进行间接访问。
- ...我是否需要首先创建迭代器指向的元素的集合?
这就是它的emplace_back
作用。
推荐阅读
- swift - 将字符串从自定义分段控件设置为 UITextField 导致崩溃
- mysql - MySQL多次选择条件列
- python - 如何将整数加入列表中,使得: ['a',1,2] 变为 ['a',12]
- regex - nginx 位置包含字符串 + 以结尾
- node.js - 在nodejs中连接到heroku postgres db时出错
- reactjs - 1.8mb 对 Webpack 是好还是坏?
- javascript - 使用 Wikipedia API 获取表格元素 (javascript/jQuery)?
- c++ - 从文本文件 C++ 问题中读取输入
- c - N Queen Solve in C,用文件中的数据替换定义
- reactjs - Reactjs - div的背景图像不起作用