将对矢量转换为哈希表/映射

时间:2017-12-02 11:15:26

标签: c++ vector hashmap

我目前正在尝试从该对中的std::vector <std::pair<vector<int>, fs::path> >创建一个哈希表,每个向量是项目作为路径的键。是否有智能我可以将其转换为std::map

1 个答案:

答案 0 :(得分:0)

相反,任何类型都可以用作std::setstd::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 }

$

ideone

上的现场演示