- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想了解 find_if 函数和 map 容器的工作原理。我在 Map.cpp 中有函数 - Tile& Map::getTile(const Point& point) 从 map 容器返回 Tile。我应该遍历容器并检查当前 map Tile 的点位置是否 == 函数的参数。
我不确定 find_if 的第三个参数 - 我如何将实际点的参数从 map 传递给 operator==() 并返回找到的 Tile?让我知道我是否应该提供完整的 .cpp 文件。感谢您的宝贵时间!
map .cpp
#include "map.h"
#include <iostream>
#include <map>
#include <algorithm>
Map::Map(int rows, int columns, int mines) {
this->rows = rows;
this->columns = columns;
this->totalMines = mines;
std::map<Point, Tile> tileContainer = {};
}
Tile& Map::getTile(const Point& point) {
std::map<Point, Tile>::iterator it = std::find_if(tileContainer.begin(), tileContainer.end(), point.operator==(?);
}
点.h
#include "interfaces.h"
struct Point : public APoint {
private:
int row;
int column;
public:
Point(int row, int column);
~Point();
int getRow() const;
int getColumn() const;
bool isInContact(const Point& point) const;
bool operator==(const Point& point) const;
bool operator!=(const Point& point) const;
};
Tile.h
#include "interfaces.h"
#include "point.h"
struct Tile : public ATile {
private:
Point& position;
int bombsInNeighbourhood;
bool bombTile;
TileState tileState;
public:
Tile(const Point& position);
~Tile();
const Point& getPosition();
void setPosition(const Point& position);
int getBombsInNeighbourhood() const;
void setBombsInNeighbourhood(int bombsInNeighbourhood);
bool isBombTile() const;
void setBombTile(bool bombTile);
TileState getTileState() const;
void setTileState(TileState tileState);
};
Map.h
#include "interfaces.h"
#include "point.h"
#include "tile.h"
struct Map : public AMap {
protected:
int rows;
int columns;
int totalMines;
std::map<Point&, Tile> tileContainer;
public:
Map(int rows, int columns, int mines);
~Map();
Tile& getTile(const Point& point);
Tile& getTile(int row, int column);
const Tile& getTile(const Point& point) const;
const Tile& getTile(int row, int column) const;
点.cpp我使用的功能:
bool Point::operator==(const Point& point) const {
if (point.column == this->getColumn() && point.row == this->getRow()) {
return true;
}
else {
return false;
}
}
最佳答案
std::find_if
的第三个参数必须是 UnaryPredicate。它接受一个参数并返回一个 bool
。
您可以将以下内容用于 UnaryPredicate。
operator()
的对象。当您将 std::find_if
与 std::map
的元素一起使用时,您必须考虑 std::的每个项目: map
是一个 std::pair
。来自 http://en.cppreference.com/w/cpp/container/map ,
value_type std::pair<const Key, T>
这是您的问题的一种解决方案,使用 lambda 函数。
Tile& Map::getTile(const Point& point)
{
auto it = std::find_if(tileContainer.begin(),
tileContainer.end(),
[&point](std::pair<Point, Title> const& item)
{
return (point == item.first);
});
...
}
但是,如果您只想比较键,您不妨使用 std::map::find
。
Tile& Map::getTile(const Point& point)
{
auto it = tileContainer.find(point);
...
}
关于 map 中的 C++ find_if 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47254187/
我正在尝试在 1 文件 .cpp 文件中构建以下代码块: #include #include using namespace std; class test { public: int a
我正在尝试了解 find_if 函数的工作原理,并且我正在按照此引用中的示例进行操作: http://www.cplusplus.com/reference/algorithm/find_if/ 当我
我根据第一个字母从数组中查找所有字符串: #include #include #include int main(){ const std::string strArray[] = {"an","b
所以我有一个名为 Song 的类,还有一个名为 SongLibrary 的类。歌曲库仅包含一组所有歌曲和适当的方法。 我目前正在尝试制作一个搜索歌曲库并检查歌曲是否具有特定标题的功能。 我遇到的问题是
我第一次在 C++ 代码中使用 std::find_if 函数。我想要执行的示例和逻辑非常简单,但不知何故我无法使其工作。 我以这种方式创建了“finder”类: /** * @class m
#include #include using namespace std; int main() { int matrix[9] = { 1,0,0,0,1,0,0,0,5 };
在我的 main.cpp 中: using namespace std; #include #include #include #include #include #include #in
我遇到过 set::find 不是查找对象的正确方法的情况,因为我找到对象的方式(通过 std::find_if)不同于它在集合中的排序方式。我没有找到任何关于以这种方式查找元素的复杂性信息。我假设它
我收到错误: no matching function for call to ‘findByPosition::findByPosition(std::vector::size_type&, std
如何检查 find_if 是否找到匹配项?当我尝试下面的代码时: SparseMatrix& SparseMatrix::operator+=(const SparseMatrix &other) {
在 std::vector 中,我想找到最大数小于某个数的元素的位置。例如: v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 我想找到一个最大小于 8 的数字。那个数字是 7。
我有一个填充字符串 vector 的实例方法。我试图找到包含特定子字符串的一个 vector 条目(目前,该子字符串是固定的 - 简单)。 我有一个.h: namespace Data { names
下面的代码有什么问题?如果结构的第一个成员等于 0,它应该在结构列表中找到一个元素。编译器提示 lambda 参数不是谓词类型。 #include #include #include #incl
谓词函数: bool Schedule::predicateFunc(map,pair >::iterator it,string &a) { return (it->first).first
使用 std::find_if 我们可以找到一个元素是否存在于普通的一维数组中。 灵感来自 this question ,我想知道,我们是否可以提供一个算法函数来检查任何类型和任意数量元素的二维数组(
我正在尝试在具有 Lambda 表达式的函数中使用 find_if。我想获取 vector 的最后一个迭代器,但我不确定如何编写它。 我可以用这段代码得到第一个迭代器。在这段代码中,struct 有一
这是我的代码片段: #include #include #include using namespace std; bool next(int j) { return(j>m; int
我正在研究从另一个 SO 帖子中获得的以下示例。示例是这样的 class checker { public: bool operator()(unsigned int i) {
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
对于从 find_if 到对象的映射指针,我应该使用示例 1 还是示例 2哪个最好? struct test { INT id } std::vector> vec; int ID = 75; au
我是一名优秀的程序员,十分优秀!