可以用C++来制作一个图,它的值是键的函数吗? C++中的STL,映射用于将键映射到一个值。我想知道我们是否可以根据一些函数来做这个映射,比如说

可以用C++来制作一个图,它的值是键的函数吗? C++中的STL,映射用于将键映射到一个值。我想知道我们是否可以根据一些函数来做这个映射,比如说,c++,stl,C++,Stl,mapM; 和值=二进制表示键 你可以这么做,但那完全没有意义。这将是一个劣质的STD::设置不正确地保证不变量,并且消耗更高的内存使用和运行时间,除非你真的想要缓存,否则绝对没有任何好处。 < P>你可以将任意的键、值对插入到STD::MAP,这样你就可以为函数F和X1,……插入席,FXI对。xn如果类型匹配,您可以选择 实现这一点的直接方法可能是使用for循环 下面是一个完整的示例: #include <climits> #include <iomanip> #inc

mapM; 和值=二进制表示键


你可以这么做,但那完全没有意义。这将是一个劣质的STD::设置不正确地保证不变量,并且消耗更高的内存使用和运行时间,除非你真的想要缓存,否则绝对没有任何好处。

< P>你可以将任意的键、值对插入到STD::MAP,这样你就可以为函数F和X1,……插入席,FXI对。xn如果类型匹配,您可以选择

实现这一点的直接方法可能是使用for循环

下面是一个完整的示例:

#include <climits>
#include <iomanip>
#include <iostream>
#include <map>
#include <string>

namespace /* anonymous */
{

  std::string
  my_function(const int n)
  {
    const auto size = static_cast<int>(CHAR_BIT * sizeof(int));
    std::string bits {};
    for (auto i = 0; i < size; ++i)
      {
        const auto bit = (n >> (size - i - 1)) & 1;
        bits += (bit ? '1' : '0');
      }
    return bits;
  }

}


int
main()
{
  std::map<int, std::string> reprs {};
  for (auto k = -3; k < 10; ++k)
    reprs[k] = my_function(k);
  for (const auto& kv : reprs)
    std::cout << std::setw(4) << kv.first << "  =>  " << kv.second << '\n';
}
如果您希望遵循优先于原始循环的算法的建议,那么可以使用与a一起使用来实现这一技巧

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <string>
#include <utility>
#include <vector>

namespace /* anonymous */
{

  std::string
  my_function(int);  // as above

}

int
main()
{
  std::vector<int> keys(13);
  std::iota(keys.begin(), keys.end(), -3);
  std::map<int, std::string> reprs {};
  const auto generator = [](const int n){
    return std::make_pair(n, my_function(n));
  };
  std::transform(keys.cbegin(), keys.cend(),
                 std::inserter(reprs, reprs.begin()),
                 generator);
  for (const auto& kv : reprs)
    std::cout << std::setw(4) << kv.first << "  =>  " << kv.second << '\n';
}

然而,我不确定迭代器和算法的使用是否真的有助于这个简单例子中代码的可读性。这里使用keys向量有点令人讨厌。如果您有Boost,您可以用。

替换它。您试图解决的问题是什么?当然,你可以把这些键值对放到地图上。请告诉我怎么做?但这不应该明确地做。你是什么意思?用于自动k:键表[k]=funck;太明确了?如果需要的话,可以将其封装到工厂函数中。是的,类似这样的函数就足够了。另外,我们在std::sort中有comparator函数。所以,我只是想问,我们能不能有一个额外的参数来完成所有的转换,然后插入到映射中。或者我们需要将键转换成相应的值,然后插入到映射中吗?但是,为更复杂的函数的结果提供缓存并非毫无意义。我需要为它编写整个模板吗?什么我不明白这个问题?写模板是什么?@5gon12eder是的,一个隐式函数,它将键转换为相应的值,然后完成map.insert。有可能吗,那怎么可能呢?我们可以在std::sort中使用比较器函数。所以,我只是想问,我们能不能有一个额外的参数来完成所有的转换,然后插入到映射中。
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <string>
#include <utility>
#include <vector>

namespace /* anonymous */
{

  std::string
  my_function(int);  // as above

}

int
main()
{
  std::vector<int> keys(13);
  std::iota(keys.begin(), keys.end(), -3);
  std::map<int, std::string> reprs {};
  const auto generator = [](const int n){
    return std::make_pair(n, my_function(n));
  };
  std::transform(keys.cbegin(), keys.cend(),
                 std::inserter(reprs, reprs.begin()),
                 generator);
  for (const auto& kv : reprs)
    std::cout << std::setw(4) << kv.first << "  =>  " << kv.second << '\n';
}