- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
文本文件
[0]
total=0
[10000]
total=3
-593 427 683
-976 703 701
-974 307 688
[20000]
total=0
[30000]
total=1
197 -83 153
[30001]
total=1
77 49 244
[40000]
total=0
头文件
using namespace std;
struct LRopeSearch
{
bool Special;
int Counter;
string PN;
POINT XY;
};
struct LRopeData
{
int X;
int Y1;
int Y2;
};
struct LRData
{
int LRID;
vector <LRopeData> Ropes;
};
typedef pair <int, LRData> LRPair;
extern map <int, LRData> LRMap;
void CreateRopeStructure();
进展
通过我的 CreateRopeStructure() 函数,我将所有文本文件信息放入 LRopeData 结构中。
我需要一个使用三个整数值的函数; ID(例如 10000)、X(例如 -500)和 Y(例如 400)并使用所有三个整数值,将根据 ID、最接近的 X、Y1 和 Y2 值进行检索。
我有结构 LRopeSearch 可用于执行此操作,但我需要除此之外的帮助才能实际使用函数中的结构来检索所述值。
谢谢。
最佳答案
啊。花了一些时间来“想象”输入数据的含义。在您最后发表评论后,我现在了解到输入是由 ID 标识的几组(空)绳索。
绳索是由 (X, Y1)-(X, Y2) 给出的有限垂直线段。
我简化了数据结构,因为在 LRData 中包含 LRID 是多余的:
typedef int LRID;
typedef std::vector<LRopeData> LRData;
typedef std::map<LRID, LRData> LRMap;
现在假设您已经实现了数据读取(CreateRopeStructure
),您可以编写一个强力搜索:
LRMap CreateRopeStructure();
#include <algorithm>
#include <iostream>
int main()
{
LRMap data = CreateRopeStructure();
// ex. from OP
int const ID = 10000;
int const X = -500;
int const Y = 400;
// select rope data by ID:
auto& ropes = data[ID];
if (ropes.empty())
{
std::cout << "infinite" << std::endl;
} else
{
// get the distance to each rope
std::vector<double> distances(ropes.size());
std::transform(
ropes.begin(), ropes.end(),
distances.begin(),
[=](LRopeData const& rope) { return rope.distanceToPoint(X, Y); });
// for c++03:
// std::tr1::bind(&LRopeData::distanceToPoint, std::tr1::placeholders::_1, X, Y));
// print the shortest distance
std::cout << *std::min_element(distances.begin(), distances.end()) << std::endl;
}
}
当然,最有趣的部分是:LRopeData::distanceToPoint
:
struct LRopeData {
int X;
int Y1;
int Y2;
double distanceToPoint(double px, double py) const
{
int y1(Y1), y2(Y2);
// normalize segment endpoints (y1, y2)
if (y1>y2) std::swap(y1, y2);
double dx = (px - X);
double dy = 0;
if (py<y1) dy = (py - y1);
if (py > y2) dy = (py - y2);
return sqrt(dx * dx + dy * dy);
}
};
查看 Live On Coliru 打印的地方:
96.8401
OP中的查询
包括我对解析输入的看法:
#include <vector>
#include <map>
#include <cmath>
//#include <tr1/functional> // bind (for c++03)
struct LRopeData {
int X;
int Y1;
int Y2;
double distanceToPoint(double px, double py) const
{
int y1(Y1), y2(Y2);
// normalize segment endpoints (y1, y2)
if (y1>y2) std::swap(y1, y2);
double dx = (px - X);
double dy = 0;
if (py<y1) dy = (py - y1);
if (py > y2) dy = (py - y2);
return sqrt(dx * dx + dy * dy);
}
};
typedef int LRID;
typedef std::vector<LRopeData> LRData;
typedef std::map<LRID, LRData> LRMap;
typedef std::pair<LRID, LRData> LRPair;
LRMap CreateRopeStructure();
#include <algorithm>
#include <iostream>
int main()
{
LRMap data = CreateRopeStructure();
// ex. from OP
int const ID = 10000;
int const X = -500;
int const Y = 400;
// select rope data by ID:
auto& ropes = data[ID];
if (ropes.empty())
{
std::cout << "infinite" << std::endl;
} else
{
// get the distance to each rope
std::vector<double> distances(ropes.size());
std::transform(
ropes.begin(), ropes.end(),
distances.begin(),
[=](LRopeData const& rope) { return rope.distanceToPoint(X, Y); });
// for c++03:
// std::bind(std::mem_fn(&LRopeData::distanceToPoint), std::placeholders::_1, X, Y));
// print the shortest distance
std::cout << *std::min_element(distances.begin(), distances.end()) << std::endl;
}
}
#define BOOST_SPIRIT_USE_PHOENIX_V3
#include <boost/fusion/adapted.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
#include <fstream>
#include <cassert>
BOOST_FUSION_ADAPT_STRUCT(LRopeData, (int,X)(int,Y1)(int,Y2))
LRMap CreateRopeStructure()
{
// input
std::ifstream ifs("input.txt");
ifs >> std::noskipws;
typedef boost::spirit::istream_iterator It;
It f(ifs), l;
// grammar
using namespace boost::spirit::qi;
rule<It, LRPair(), blank_type, locals<int> > lrmap;
lrmap %= '[' >> int_ >> ']' >> +eol
>> "total" >> '=' >> omit [ int_ [ _a = _1 ] ] >> +eol
>> repeat(_a) [ int_ >> int_ >> int_ >> +eol ]
;
// parse
LRMap data;
assert(phrase_parse(f, l, +lrmap, blank, data));
if (f!=l)
std::cout << "Remaining unparsed: '" << std::string(f,l) << "'\n";
// done
return data;
}
关于c++ - 检索结构中最接近的 X 和 Y 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447455/
我想创建一个返回值的方法(我们称之为“z”)。它的值由另一个值决定(我们称之为“y”)。基本上我想要的是满足以下条件: 当 x 接近 0 时,z 接近 100。 当 x 接近无穷大时,z 接近 0。
我正在尝试使用 Java 中的PreparedStatement 执行查询。 当我尝试执行查询时,收到错误号 1064(语法错误)。 我已经在 MySQL 查询浏览器中使用替换值对此进行了测试,效果很
我正在开发一个应用程序来解析 Scala 中的命令。命令的一个例子是: todo get milk for friday 所以计划是让一个非常智能的解析器将行分开并识别命令部分以及字符串中有时间引用的
来自 http://directwebremoting.org/dwr/reverse-ajax/index.html ,它表示它支持轮询、 cometd 、搭载。这是否意味着当我们实现这种方法时,我
我开始研究一个概念,该概念要求我找到一种方法,以给定的速度将矩形移向给定的点。我正在为 Android 开发,所以这对速度非常关键(它也将针对可能的数百个对象计算每一帧。) 我能想到的解决方案如下:
我正在处理一个处理“门票”的表(状态=“开放”或状态=“关闭”)。当票证关闭时,相关系统不会更改状态,而是会创建一个具有“已关闭”状态的重复条目。 对于“ticket_number”关键字段,如果存在
我正在尝试在 python 中执行一些 n-gram 计数,我想我可以使用 MySQL(MySQLdb 模块)来组织我的文本数据。 我有一个很大的表,大约有 1000 万条记录,代表由唯一数字 ID(
我正在尝试将数据添加到 mariadb 表中。我想将 val0 到 val5 作为查询的值传递。但我收到错误 OperationalError: close "%": 语法错误代码 list_Valu
我正在使用 (Py)OpenGL 显示 256 色索引图像。我将着色器与包含调色板的一维纹理一起使用。这是片段着色器代码: #version 330 uniform sampler2D texture
对于我的元素 areallybigpage.com (*),我想看看我们能用 CSS 的 transform: scale(...) 走多远。 这有效并以正常大小显示文本: #id1 { positi
我有两列带有数字数据的 Pandas 表(dtype flaot64)。 我将每列四舍五入到小数点后有 2 位数字,然后使用函数将其四舍五入到接近 0.5,但由于某种原因,只有一列四舍五入为 0.05
我正在构建一个由用户登录和注册组成的应用程序,但每次我在模拟器上测试它时,我都会收到强制关闭。以下是我在日志猫中收到的错误: 08-14 14:06:28.853: D/dalvikvm(828):
我正在尝试在 Python 中实现 Strassen 矩阵乘法。我已经让它发挥了一些作用。这是我的代码: a = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]] b
为什么这不起作用?这与 = 附近的命令字符串语法有关,但我似乎无法弄清楚,在线示例似乎完全相同。编辑: Activated In 是一列。 示例来自 How to select data from d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我有一个测试区,它是来自数据库的动态文本,可能有数千个单词。我希望它中断并在每段中用句号将近 100 个(任意长度)单词作为一个段落。我能够在 100 个单词后中断,但不能完全停止。为了在 100 个
我是 hadoop 和 hive 的新手。我正在尝试将数据加载到配置单元表中,但遇到以下错误。 另一方面,我尝试使用语句 stmt.execute("INSERT INTO employee VALU
这是来自一个统计项目。我定义了下面的函数,但是当n接近400时,第二个方法很慢。第一个方法很好(这里有人帮助了我in this question) import Math.Combinatorics.
我正在尝试创建一个 css 侧边菜单,但是当我关闭菜单并将 div 容器宽度设置为 0 时,链接仍然可见。 这是 jsfiddle - https://jsfiddle.net/atLvp6k7/ 有
我对 MySQL 还很陌生。我必须使用输出参数调用存储过程。我在互联网上搜索了很多,但没有找到解决我的问题的正确方法。如果我使用 @outputParamName 调用存储过程,它会说我在 NULL
我是一名优秀的程序员,十分优秀!