如何解决g++: 'class std::map<int, std::vector<std::vector<int> > >' 没有名为 'insert_or_assign' 的成员
在 leetcode 上编码一个问题。我正在使用 std::map
将 int 链接到 vector<vector<int>>
。我检查了 cppreference 上的 API,并使用函数 std::map::insert_or_assign()
插入键值对。
但是,在 Windows 10 powershell 终端(编辑器-VSCode)上使用 g++ 编译代码后,我在终端中得到以下输出。
PS C:\Users\vishw\Desktop\vsCode\p15_leetcode> g++ p15.cpp -o p15.exe
p15.cpp: In member function 'bool Solution::present(std::vector<std::vector<int> >&,std::vector<int>&)':
p15.cpp:75:19: error: 'class std::map<int,std::vector<std::vector<int> > >' has no member named 'insert_or_assign'
store.insert_or_assign(arg_nums[0],v);
为什么会出现这个错误? C++版本问题?编译器问题?请帮助! PFA低于我的代码
class Solution {
private:
map<int,vector<vector<int>>> store;
public:
vector<vector<int>> threeSum(vector<int>& arg_nums) {
vector<vector<int>> vector_return;
if (arg_nums.size() < 3) return vector_return;
vector<int> holder;
for (int index0 = 0; index0 < arg_nums.size() - 2; ++index0) {
for (int index1 = index0 + 1; index1 < arg_nums.size() - 1; ++index1) {
if (index1 != index0) {
for (int index2 = index1 + 1; index2 < arg_nums.size() - 0; ++index2) {
if ((index2 != index1)
&& (index2 != index0)) {
if (arg_nums[index2] + arg_nums[index1] + arg_nums[index0] == 0) {
holder = sort(arg_nums[index0],arg_nums[index1],arg_nums[index2]);
if (!present(vector_return,holder)) {
vector_return.push_back(holder);
}
}
}
}
}
}
}
return vector_return;
}
vector<int> sort(int arg_num0,int arg_num1,int arg_num2) {
vector<int> vector_return;
if (arg_num0 > arg_num1) {
vector_return.push_back(arg_num0);
vector_return.insert(vector_return.begin(),arg_num1);
if (arg_num2 > arg_num0) vector_return.push_back(arg_num2);
else {
if ((arg_num2 > arg_num1) && (arg_num2 <= arg_num0)) {
vector_return.insert(++vector_return.begin(),arg_num2);
} else vector_return.insert(vector_return.begin(),arg_num2);
}
} else {
vector_return.push_back(arg_num1);
vector_return.insert(vector_return.begin(),arg_num0);
if (arg_num2 > arg_num1) vector_return.push_back(arg_num2);
else {
if ((arg_num2 > arg_num0) && (arg_num2 <= arg_num1)) {
vector_return.insert(++vector_return.begin(),arg_num2);
}
}
return vector_return;
}
bool present(vector<vector<int>>& arg_gathered,vector<int>& arg_nums) {
if (store.find(arg_nums[0]) == store.end()) {
vector<vector<int>> v;
v.push_back(arg_nums);
store.insert_or_assign(arg_nums[0],v);
return true;
} else {
map<int,vector<vector<int>>>::iterator iterator0 = store.find(arg_nums[0]);
vector<vector<int>>::iterator iterator1 = (std::get<vector<vector<int>>>(*iterator0)).begin();
while (iterator1 != std::get<vector<vector<int>>>(*iterator0).end()) {
if (*iterator1 == arg_nums) return false;
iterator1 = iterator1 + 1;
}
(std::get<vector<vector<int>>>(*iterator0)).push_back(arg_nums);
return true;
}
}
};
解决方法
这是一个简单的版本问题,感谢acraig5075的帮助(问题下方评论),代码编译成功。 这是在编译时指定 c++ 版本的方法
g++ -std=c++17 your_program_name.cpp -o you_give_name.exe
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。