我的问题与此one略有不同。
有一个带有两个元素的unordered_set。我想同时操作这两个元素'''像这样:
unordered_set<vector<bool>> st;
st.insert(vector<bool>(100,true));
st.insert(vector<bool>(100,false));
// vector<bool> temp_v(100,true);
// temp_v[3] = false;
// st.insert(move(temp_v));
if (st.size()!=2) return;
for (int i=0; i<100; i++)
cout << (st.begin()->at(i)) ^ (st.rbegin()->at(i)) << endl;
但是,unordered_set
没有成员函数rbegin()
。我知道我可以使用指向u_s::begin()
的迭代器并将其推进一个。还有更多&#34;优雅&#34;这样做的方法?
-------------------------------------溶液--------- ---------------------------------
受到@YSC的启发,实现目的的elegant
方法是:
auto & e1 = *begin(st);
auto & e2 = *(++begin(st));
for (int i=0; i<100; i++) cout << e1[i] ^ e2[i] << endl;
,可能依赖于#include <algorithm>
,与双迭代器解决方案几乎相同。
答案 0 :(得分:0)
好吧,如果你确定它有两个元素,KISS:
struct not_vector { /*...*/ };
unordered_set<not_vector> st;
// ...
not_vector const& first = *begin(st);
not_vector const& last = *(++begin(st));
unordered_set
迭代器ForwardIterator,operator++
已定义并执行您期望的操作。另一方面,没有办法向后退,只有BidirectionalIterator可以。这就是为什么没有unordered_set::rbegin()
。
答案 1 :(得分:0)
还有更“优雅”的方法吗?
是的,这是实现相同匹配的更明显的方法:
int values[] { 0, 3 };
int index = random_number_generated_by_compiler_version() % 2;
std::cout << values[index] << values[!index] << std::endl;