【发布时间】:2021-01-17 23:17:57
【问题描述】:
虽然我正在尝试创建一个地图数据结构,其中 Key 为 pair<pair<int, int>, bool,Value 为 int。
- 在 xcode 上编译时,构建失败并出现链接器错误
- 在 cpp.sh 或 godbolt.org 等网站上编译时,它
引发模板参数错误
代码如下:
#include <iostream>
#include <vector>
#include <map>
#include <utility>
using namespace std;
typedef std::pair<int,int> pair;
struct comp
{
template<typename T>
bool operator()(const T &l, const T &r) const
{
if (l.first == r.first)
return l.second > r.second;
return l.first < r.first;
}
};
int main()
{
map<pair,bool,comp> mp =
{
{std::make_pair<4,0>,true},
{std::make_pair<4,1>,true}
}; //Initializing
mp.insert(make_pair(3,0),true); //Inserting
return 0;
}
我使用模板编写 comp 结构的原因是用于密钥 ordering。
但是,从技术上讲,我不需要为我正在解决的问题订购。
因此,当我尝试使用unordered_map 时,会导致类似的构建错误
【问题讨论】:
-
您应该在问题中逐字包含错误消息。话虽如此,将
pair用作std::pair<int,int>的别名并结合using namespace std;似乎不是一个好主意。 -
在
make_pair调用中用括号替换尖括号。std::pair是可比的,所以你的comp是多余的。 -
@bipll:你说得对,我删除了
comp,它成功了,谢谢。如果我的密钥是,则可能需要 comp
标签: c++ dictionary data-structures stl