我目前正在尝试从该对中的std::vector <std::pair<vector<int>, fs::path> >
创建一个哈希表,每个向量是项目作为路径的键。是否有智能我可以将其转换为std::map
?
答案 0 :(得分:0)
相反,任何类型都可以用作std::set
或std::map
的键,如果有适当的较少的仿函数可用。如果std::less
(默认情况下使用)不合适,则可能会提供自己的。{/ p>
恕我直言,最重要的是:较少的仿函数必须提供严格的键值顺序。
我做了一个简单的MCVE来演示这个testLessVector
:
#include <algorithm>
#include <iostream>
#include <set>
#include <vector>
// convenience: stream output of vector<int>
std::ostream& operator << (
std::ostream &out, const std::vector<int> &values)
{
out << '{';
for (const int value : values) out << ' ' << value;
out << " }";
return out;
}
// the less functor
struct Less {
bool operator()(
const std::vector<int> &v1, const std::vector<int> &v2) const
{
const size_t size1 = v1.size(), size2 = v2.size();
for (size_t i = 0, n = std::min(size1, size2); i < n; ++i) {
if (v1[i] < v2[i]) return true;
if (v1[i] > v2[i]) return false;
}
return size1 < size2;
}
};
int main()
{
// build some sample data
std::set<std::vector<int>, Less> sample;
sample.insert(std::vector<int>{ 2, 3, 1 });
sample.insert(std::vector<int>{ 3, 1, 2 });
sample.insert(std::vector<int>{ 3, 1, 2, 1});
sample.insert(std::vector<int>{ 2, 1, 3 });
sample.insert(std::vector<int>{ 1, 2, 3 });
// print sample data sorted
for (const std::vector<int> value : sample) {
std::cout << value << std::endl;
}
// done
return 0;
}
在Window 10(64位)上的Cygwin中测试:
$ g++ --version
g++ (GCC) 6.4.0
$ g++ -std=c++11 -o testLessVector testLessVector.cc
$ ./testLessVector
{ 1 2 3 }
{ 2 1 3 }
{ 2 3 1 }
{ 3 1 2 }
{ 3 1 2 1 }
$
上的现场演示