假设我正在尝试使用包含列表在CPP中的列表上插入随机内容
'https://ng-complete-guide-257c0.firebaseio.com/posts.json
如何,以及在哪里调用newList.sort()使除第一个插入字符(即James)之外的所有其他字符排序?
答案 0 :(得分:6)
这是一个潜在的解决方案,首先删除第一个条目,然后进行排序。
auto front = newList.front();
newList.pop_front();
newList.sort();
newList.push_front(front);
这将对整个列表进行排序,但是开头(示例中的James
)将重新添加到列表的开头。
答案 1 :(得分:4)
保持第一个元素位置的简单解决方案:
如果“第一插入”不是第一个元素-毕竟元素可以插入任意位置-那么就需要更复杂的逻辑。
不幸的是,在标准库中似乎没有针对子列表的通用排序算法。
答案 2 :(得分:2)
使用自定义比较器,将James
放在所有其他比较器的前面:
bool compare(const std::string& a, const std::string& b) {
if (a == b) return false;
else if (a == James) return true;
else if (b == James) return false;
else return a < b;
}
您需要注意a==b
的情况才能严格执行弱排序(James < James
必须返回false
)。然后James
在所有其他元素之前,其他所有在James
之后,否则您只需比较这两个元素。
请注意,如果列表中有多个James
,那么在进行比较时,它们都将排在前面,因此,它并不能完全满足您的要求。
答案 3 :(得分:-2)
auto first = newList.front();
newList.sort();
cout<<first<<" ";
for(auto it :newList)
cout<<it<<" ";