PYA*_*PYA 7 c++ iterator set language-lawyer c++11
在试图解决一个问题,我开始思考这个-给予user-defined class和2 comparators吧,让我们说我们有2套std::set<user_class,comparator_inc>,并std::set<user_class,comparator_dec>在comparators排序上的一个值增减值user_class(一个简单的int也许).这是我的代码:
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::set;
struct A
{
int val;
};
struct c_inc
{
bool operator()(const A& first,const A& second) const
{
return first.val > second.val;
}
};
struct c_dec
{
bool operator()(const A& first,const A& second) const
{
return first.val < second.val;
}
};
int main()
{
set<A,c_inc> s1;
set<A,c_dec> s2;
auto x = s1.insert({1});
cout << x.first->val << endl;
x = s2.insert({1});
x = s2.insert({0});
cout << x.first->val << endl;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有定义的行为重新分配x到输出的insert成set与相同Key,但不同的比较?这种用途有问题吗?它是在标准中定义的应该是什么,还是依赖于实现?
由于代码编译我认为两种情况下的return类型insert是相同的 - 这个假设是正确的吗?
我认为它依赖于实现.
从概念上讲,返回类型s1.insert和s2.insert不同; 特别是它们有不同的迭代器类型,即std::set<A,c_inc>::iterator和std::set<A,c_dec>::iterator.如何std::set::iterator定义类型是实现定义的.
Run Code Online (Sandbox Code Playgroud)using iterator = implementation-defined; // see [container.requirements] using const_iterator = implementation-defined; // see [container.requirements]
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |