我试图创建一个需要两个比较两个对象的函数,但我希望它可以与std :: sort一样可用。
换句话说,我希望这些代码能够用C ++编译
bool mycomp(int a, int b) {return a<b;}
int main () {
deque<int> qu;
special_push(qu, 3);
special_push(qu, 5, less<int>());
special_push(qu, 5, mycomp);
}
到目前为止我已尝试过:
template< typename _Compare > void push (deque<int> & qu,int val, _Compare comp = less<int>()) {
while(qu.empty()==false && comp(val, qu.back())) {
qu.pop_back();
}
qu.push_back(val);
}
答案 0 :(得分:0)
修复明显的拼写错误后,您丢失的内容是模板参数的默认值:
.fighter-card {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 400px;
min-height: 400px;
}
.fighter-card .front {
width: 100%;
height: 100%;
background: #171717;
padding: 30px;
box-sizing: border-box;
transition: .5s;
transform-origin: right;
float: left;
}
.ranking-position {
font-weight: bold;
width: 50%;
text-align: left;
float: left;
color: #fff;
font-size: 40px;
}
.more {
width: 50%;
text-align: right;
cursor: pointer;
float: right;
font-size: 24px;
color: #fff;
display: block;
}
.fighter-picture {
background-size: cover;
}
.information {
margin: 0;
padding: 0;
}
.information li {
padding: 10px 0;
border-bottom: 2px solid #fff;
display: flex;
font-weight: bold;
cursor: pointer;
color: #fff;
}
.information li:last-child {
border-bottom: none;
}
.information li .information-left {
width: 50%;
}
.information li .information-right {
width: 50%;
text-align: right;
}
.fighter-card .back {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 30px;
background: rgba(0,0,0,0.7);
box-sizing: border-box;
transform-origin: left;
transition: .5s;
transform: translateX(100%) rotateY(90deg);
}
.fighter-card .back.active {
transform: translateX(0) rotateY(0deg);
}
.fighter-card .front.active {
transform: translateX(0) rotateY(0deg);
}
.fighter-card .front {
transform: translateX(-100%) rotateY(90deg);
}
.go-back {
font-size: 24px;
color: #fff;
text-align: right;
}
.go-back .fa {
cursor: pointer;
}
或者,您可以使用重载函数(这通常是libstdc ++在内部执行的操作,但我不知道有任何理由这样做。)
请注意,您可能应该解决几个风格或迂腐问题。
答案 1 :(得分:0)
你快到了。您缺少的只是Compare
的默认类型。我还推荐使用模板化运算符的新std::less<>
。
template <class Compare = std::less<>>
// ^~~~~~~~~~~~~
auto special_push(std::deque<int> & qu, int val, Compare comp = std::less<>{}) -> void
{
while(!qu.empty() && comp(val, qu.back()))
{
qu.pop_back();
}
qu.push_back(val);
}