DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DA::DATable< T > 模板类 参考

支持稀疏存储和各种算法的表格类 更多...

#include <DATable.hpp>

Public 类型

using Type = T
 值类型
 
using IndexType = int
 索引类型
 
using IndexPair = std::pair< IndexType, IndexType >
 索引对类型
 
using TableType = da_hash_table< T, IndexType >
 内部表格类型
 
using TableIterator = typename TableType::iterator
 表格迭代器
 
using TableConstIterator = typename TableType::const_iterator
 表格常量迭代器
 
using value_type = typename TableType::value_type
 兼容std的值类型
 
using PredFun = std::function< bool(const value_type &) >
 谓词函数类型
 

Public 成员函数

 DATable ()
 默认构造函数
 
 DATable (const DATable &other)
 拷贝构造函数
 
 DATable (DATable &&other) noexcept
 移动构造函数
 
DATable< T > & operator= (const DATable &other)
 拷贝赋值运算符
 
DATable< T > & operator= (DATable &&other) noexcept
 移动赋值运算符
 
bool contain (int r, int c) const
 检查单元格是否有内容
 
bool contain (IndexPair i) const
 检查单元格是否有内容(使用索引对)
 
const T & at (int r, int c) const
 带边界检查的元素访问
 
T & at (int r, int c)
 带边界检查的元素访问
 
const T & at (const IndexPair &i) const
 带边界检查的元素访问(使用索引对)
 
T & at (const IndexPair &i)
 带边界检查的元素访问(使用索引对)
 
cell (int r, int c) const
 安全的元素访问,返回默认值如果不存在
 
cell (const IndexPair &i) const
 安全的元素访问,返回默认值如果不存在(使用索引对)
 
T & operator[] (const IndexPair &i)
 下标运算符访问元素
 
T & operator() (IndexType r, IndexType c)
 函数调用运算符访问元素
 
const T operator() (IndexType r, IndexType c) const
 函数调用运算符访问元素(常量版本)
 
void set (const IndexPair &k, const T &v)
 设置单元格值
 
void set (IndexType row, IndexType col, const T &v)
 设置单元格值
 
int rowCount () const
 获取表格行数
 
int columnCount () const
 获取表格列数
 
IndexPair shape () const
 获取表格形状
 
std::size_t size () const
 获取表格元素数量
 
bool empty () const
 检查表格是否为空
 
void recalcShape ()
 重新计算表格形状
 
bool removeCell (int r, int c)
 移除指定单元格
 
bool removeCell (const IndexPair &i)
 移除指定单元格(使用索引对)
 
void clear ()
 清空表格
 
std::size_t erase_if (PredFun pred)
 按条件删除元素
 
void dropColumn (IndexType col)
 移除指定列
 
TableConstIterator find (const IndexPair &i) const
 查找元素
 
TableConstIterator find (int r, int c) const
 查找元素
 
TableIterator find (const IndexPair &i)
 查找元素
 
TableIterator find (int r, int c)
 查找元素
 
TableConstIterator end () const
 返回末尾迭代器
 
TableIterator end ()
 返回末尾迭代器
 
TableConstIterator begin () const
 返回起始迭代器
 
TableIterator begin ()
 返回起始迭代器
 
template<typename OtherType >
DATable< OtherType > transfered (std::function< OtherType(const T &v) > trFun) const
 转换表格数据类型
 
void transferColumn (IndexType col, std::function< bool(const T &v) > trFun) const
 遍历指定列
 
template<typename OtherType >
DATable< T > & operator= (const da_vector_table< OtherType > &other)
 da_vector_table 赋值
 
TableTyperawData ()
 获取内部表格数据
 
const TableTyperawData () const
 获取内部表格数据(常量版本)
 
IndexPair getShape () const
 获取表格形状
 

详细描述

template<typename T>
class DA::DATable< T >

支持稀疏存储和各种算法的表格类

此类提供了一个稀疏表格数据结构,内部使用 da_hash_table 存储数据, 同时维护表格的形状信息,提供方便的表格操作接口。

模板参数
T存储的值类型

构造及析构函数说明

◆ DATable() [1/3]

template<typename T >
DA::DATable< T >::DATable ( )

默认构造函数

模板参数
T存储的值类型
DA::DATable<int> table; // 创建一个空的表格
支持稀疏存储和各种算法的表格类
Definition DATable.hpp:26

◆ DATable() [2/3]

template<typename T >
DA::DATable< T >::DATable ( const DATable< T > &  other)

拷贝构造函数

模板参数
T存储的值类型
参数
other要拷贝的表格
table1.set(0, 0, 42);
DA::DATable<int> table2(table1); // 拷贝构造
void set(const IndexPair &k, const T &v)
设置单元格值
Definition DATable.hpp:472

◆ DATable() [3/3]

template<typename T >
DA::DATable< T >::DATable ( DATable< T > &&  other)
noexcept

移动构造函数

模板参数
T存储的值类型
参数
other要移动的表格
DA::DATable<int> createTable() {
table.set(0, 0, 42);
return table; // 使用移动语义
}
auto table = createTable(); // 高效,不会拷贝数据

成员函数说明

◆ at() [1/4]

template<typename T >
T & DA::DATable< T >::at ( const IndexPair i)

带边界检查的元素访问(使用索引对)

模板参数
T存储的值类型
参数
i索引对
返回
元素的引用
异常
std::out_of_range如果元素不存在
table.set(0, 0, 42);
try {
int& value = table.at({0, 0}); // 返回42
value = 43; // 修改元素值
int& invalid = table.at({1, 1}); // 抛出std::out_of_range
} catch (const std::out_of_range& e) {
// 处理异常
}
const T & at(int r, int c) const
带边界检查的元素访问
Definition DATable.hpp:288

◆ at() [2/4]

template<typename T >
const T & DA::DATable< T >::at ( const IndexPair i) const

带边界检查的元素访问(使用索引对)

模板参数
T存储的值类型
参数
i索引对
返回
元素的常量引用
异常
std::out_of_range如果元素不存在
table.set(0, 0, 42);
try {
const int& value = table.at({0, 0}); // 返回42
const int& invalid = table.at({1, 1}); // 抛出std::out_of_range
} catch (const std::out_of_range& e) {
// 处理异常
}

◆ at() [3/4]

template<typename T >
T & DA::DATable< T >::at ( int  r,
int  c 
)

带边界检查的元素访问

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
元素的引用
异常
std::out_of_range如果元素不存在
table.set(0, 0, 42);
try {
int& value = table.at(0, 0); // 返回42
value = 43; // 修改元素值
int& invalid = table.at(1, 1); // 抛出std::out_of_range
} catch (const std::out_of_range& e) {
// 处理异常
}

◆ at() [4/4]

template<typename T >
const T & DA::DATable< T >::at ( int  r,
int  c 
) const

带边界检查的元素访问

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
元素的常量引用
异常
std::out_of_range如果元素不存在
table.set(0, 0, 42);
try {
const int& value = table.at(0, 0); // 返回42
const int& invalid = table.at(1, 1); // 抛出std::out_of_range
} catch (const std::out_of_range& e) {
// 处理异常
}

◆ begin() [1/2]

template<typename T >
DATable< T >::TableIterator DA::DATable< T >::begin ( )

返回起始迭代器

模板参数
T存储的值类型
返回
指向表格起始的迭代器
for (auto it = table.begin(); it != table.end(); ++it) {
// 处理元素
}
TableConstIterator end() const
返回末尾迭代器
Definition DATable.hpp:785
TableConstIterator begin() const
返回起始迭代器
Definition DATable.hpp:821

◆ begin() [2/2]

template<typename T >
DATable< T >::TableConstIterator DA::DATable< T >::begin ( ) const

返回起始迭代器

模板参数
T存储的值类型
返回
指向表格起始的常量迭代器
for (auto it = table.begin(); it != table.end(); ++it) {
// 处理元素
}

◆ cell() [1/2]

template<typename T >
T DA::DATable< T >::cell ( const IndexPair i) const

安全的元素访问,返回默认值如果不存在(使用索引对)

模板参数
T存储的值类型
参数
i索引对
返回
元素的值或默认构造的值
table.set(0, 0, 42);
int value = table.cell({0, 0}); // 返回42
int missing = table.cell({1, 1}); // 返回0(默认构造的int)
T cell(int r, int c) const
安全的元素访问,返回默认值如果不存在
Definition DATable.hpp:383

◆ cell() [2/2]

template<typename T >
T DA::DATable< T >::cell ( int  r,
int  c 
) const

安全的元素访问,返回默认值如果不存在

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
元素的值或默认构造的值
table.set(0, 0, 42);
int value = table.cell(0, 0); // 返回42
int missing = table.cell(1, 1); // 返回0(默认构造的int)

◆ clear()

template<typename T >
void DA::DATable< T >::clear ( )

清空表格

模板参数
T存储的值类型
table.set(0, 0, 42);
table.clear(); // 清空表格
// 现在表格为空
void clear()
清空表格
Definition DATable.hpp:642

◆ columnCount()

template<typename T >
int DA::DATable< T >::columnCount ( ) const

获取表格列数

模板参数
T存储的值类型
返回
表格的列数
table.set(2, 3, 42);
int cols = table.columnCount(); // 返回4
int columnCount() const
获取表格列数
Definition DATable.hpp:525

◆ contain() [1/2]

template<typename T >
bool DA::DATable< T >::contain ( IndexPair  i) const

检查单元格是否有内容(使用索引对)

模板参数
T存储的值类型
参数
i索引对
返回
如果单元格有内容返回true,否则返回false
table.set(0, 0, 42);
bool hasValue = table.contain({0, 0}); // 返回true
bool noValue = table.contain({1, 1}); // 返回false
bool contain(int r, int c) const
检查单元格是否有内容
Definition DATable.hpp:225

◆ contain() [2/2]

template<typename T >
bool DA::DATable< T >::contain ( int  r,
int  c 
) const

检查单元格是否有内容

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
如果单元格有内容返回true,否则返回false
table.set(0, 0, 42);
bool hasValue = table.contain(0, 0); // 返回true
bool noValue = table.contain(1, 1); // 返回false

◆ dropColumn()

template<typename T >
void DA::DATable< T >::dropColumn ( IndexType  col)

移除指定列

模板参数
T存储的值类型
参数
col要移除的列索引
table.set(0, 0, 42);
table.set(0, 1, 43);
table.set(0, 2, 44);
table.dropColumn(1); // 移除第1列
// 现在第2列变为第1列
void dropColumn(IndexType col)
移除指定列
Definition DATable.hpp:900

◆ empty()

template<typename T >
bool DA::DATable< T >::empty ( ) const

检查表格是否为空

模板参数
T存储的值类型
返回
如果表格为空返回true,否则返回false
if (table.empty()) {
std::cout << "表格为空" << std::endl;
}
bool empty() const
检查表格是否为空
Definition DATable.hpp:857

◆ end() [1/2]

template<typename T >
DATable< T >::TableIterator DA::DATable< T >::end ( )

返回末尾迭代器

模板参数
T存储的值类型
返回
指向表格末尾的迭代器
for (auto it = table.begin(); it != table.end(); ++it) {
// 处理元素
}

◆ end() [2/2]

template<typename T >
DATable< T >::TableConstIterator DA::DATable< T >::end ( ) const

返回末尾迭代器

模板参数
T存储的值类型
返回
指向表格末尾的常量迭代器
for (auto it = table.begin(); it != table.end(); ++it) {
// 处理元素
}

◆ erase_if()

template<typename T >
std::size_t DA::DATable< T >::erase_if ( PredFun  pred)

按条件删除元素

模板参数
T存储的值类型
参数
pred谓词函数,返回true表示删除元素
返回
删除的元素数量
table.set(0, 0, 42);
table.set(1, 1, 43);
// 删除值等于42的元素
std::size_t count = table.erase_if([](const auto& v) { return v.second == 42; });
// count = 1
std::size_t erase_if(PredFun pred)
按条件删除元素
Definition DATable.hpp:878

◆ find() [1/4]

template<typename T >
DATable< T >::TableIterator DA::DATable< T >::find ( const IndexPair i)

查找元素

模板参数
T存储的值类型
参数
i索引对
返回
指向元素的迭代器,如果未找到则返回end()
table.set(0, 0, 42);
auto it = table.find({0, 0});
if (it != table.end()) {
it->second = 43; // 修改元素值
}
TableConstIterator find(const IndexPair &i) const
查找元素
Definition DATable.hpp:702

◆ find() [2/4]

template<typename T >
DATable< T >::TableConstIterator DA::DATable< T >::find ( const IndexPair i) const

查找元素

模板参数
T存储的值类型
参数
i索引对
返回
指向元素的常量迭代器,如果未找到则返回end()
table.set(0, 0, 42);
auto it = table.find({0, 0});
if (it != table.end()) {
std::cout << "找到元素: " << it->second << std::endl;
}

◆ find() [3/4]

template<typename T >
DATable< T >::TableIterator DA::DATable< T >::find ( int  r,
int  c 
)

查找元素

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
指向元素的迭代器,如果未找到则返回end()
table.set(0, 0, 42);
auto it = table.find(0, 0);
if (it != table.end()) {
it->second = 43; // 修改元素值
}

◆ find() [4/4]

template<typename T >
DATable< T >::TableConstIterator DA::DATable< T >::find ( int  r,
int  c 
) const

查找元素

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
指向元素的常量迭代器,如果未找到则返回end()
table.set(0, 0, 42);
auto it = table.find(0, 0);
if (it != table.end()) {
std::cout << "找到元素: " << it->second << std::endl;
}

◆ getShape()

template<typename T >
DATable< T >::IndexPair DA::DATable< T >::getShape ( ) const

获取表格形状

模板参数
T存储的值类型
返回
包含最大行索引和最大列索引的pair
table.set(2, 3, 42);
auto shape = table.getShape(); // 返回(3, 4)
std::cout << "表格形状: " << shape.first << " x " << shape.second << std::endl;
// 输出: 表格形状: 3 x 4
IndexPair shape() const
获取表格形状
Definition DATable.hpp:542
IndexPair getShape() const
获取表格形状
Definition DATable.hpp:263

◆ operator()() [1/2]

template<typename T >
T & DA::DATable< T >::operator() ( IndexType  r,
IndexType  c 
)

函数调用运算符访问元素

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
元素的引用
table(0, 0) = 42; // 插入或修改元素
int value = table(0, 0); // 获取元素值
int missing = table(1, 1); // 返回默认构造的值(0)

◆ operator()() [2/2]

template<typename T >
const T DA::DATable< T >::operator() ( IndexType  r,
IndexType  c 
) const

函数调用运算符访问元素(常量版本)

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
元素的常引用

◆ operator=() [1/3]

template<typename T >
template<typename OtherType >
DATable< T > & DA::DATable< T >::operator= ( const da_vector_table< OtherType > &  other)

da_vector_table 赋值

模板参数
T存储的值类型
OtherType源值类型
参数
other源表格
返回
当前表格的引用
DA::da_vector_table<int> vectorTable(3, 4, 42);
table = vectorTable; // 从vectorTable赋值
二维表格数据结构,使用一维数组存储以提高缓存友好性
Definition da_vector_table.hpp:22

◆ operator=() [2/3]

template<typename T >
DATable< T > & DA::DATable< T >::operator= ( const DATable< T > &  other)

拷贝赋值运算符

模板参数
T存储的值类型
参数
other要拷贝的表格
返回
当前表格的引用
table1.set(0, 0, 42);
table2 = table1; // 拷贝赋值

◆ operator=() [3/3]

template<typename T >
DATable< T > & DA::DATable< T >::operator= ( DATable< T > &&  other)
noexcept

移动赋值运算符

模板参数
T存储的值类型
参数
other要移动的表格
返回
当前表格的引用
table1.set(0, 0, 42);
table2 = std::move(table1); // 移动赋值,table1变为空

◆ operator[]()

template<typename T >
T & DA::DATable< T >::operator[] ( const IndexPair i)

下标运算符访问元素

模板参数
T存储的值类型
参数
i索引对
返回
元素的引用
table[{0, 0}] = 42; // 设置元素值
int value = table[{0, 0}]; // 获取元素值

◆ rawData() [1/2]

template<typename T >
DATable< T >::TableType & DA::DATable< T >::rawData ( )

获取内部表格数据

模板参数
T存储的值类型
返回
内部表格数据的引用
注解
此函数不安全,写操作完成后应该调用recalcShape
auto& data = table.rawData();
// 直接操作内部数据
data[{0, 0}] = 42;
// 操作完成后需要重新计算形状
table.recalcShape();
void recalcShape()
重新计算表格形状
Definition DATable.hpp:558
TableType & rawData()
获取内部表格数据
Definition DATable.hpp:664

◆ rawData() [2/2]

template<typename T >
const DATable< T >::TableType & DA::DATable< T >::rawData ( ) const

获取内部表格数据(常量版本)

模板参数
T存储的值类型
返回
内部表格数据的常量引用
const DA::DATable<int> table;
const auto& data = table.rawData();
// 只能读取内部数据

◆ recalcShape()

template<typename T >
void DA::DATable< T >::recalcShape ( )

重新计算表格形状

模板参数
T存储的值类型
// 直接操作内部数据后
table.recalcShape(); // 重新计算形状

◆ removeCell() [1/2]

template<typename T >
bool DA::DATable< T >::removeCell ( const IndexPair i)

移除指定单元格(使用索引对)

模板参数
T存储的值类型
参数
i索引对
返回
如果成功移除返回true,否则返回false
table.set(0, 0, 42);
bool removed = table.removeCell({0, 0}); // 返回true
bool notRemoved = table.removeCell({1, 1}); // 返回false
bool removeCell(int r, int c)
移除指定单元格
Definition DATable.hpp:596

◆ removeCell() [2/2]

template<typename T >
bool DA::DATable< T >::removeCell ( int  r,
int  c 
)

移除指定单元格

模板参数
T存储的值类型
参数
r行索引
c列索引
返回
如果成功移除返回true,否则返回false
table.set(0, 0, 42);
bool removed = table.removeCell(0, 0); // 返回true
bool notRemoved = table.removeCell(1, 1); // 返回false

◆ rowCount()

template<typename T >
int DA::DATable< T >::rowCount ( ) const

获取表格行数

模板参数
T存储的值类型
返回
表格的行数
table.set(2, 3, 42);
int rows = table.rowCount(); // 返回3
int rowCount() const
获取表格行数
Definition DATable.hpp:508

◆ set() [1/2]

template<typename T >
void DA::DATable< T >::set ( const IndexPair k,
const T &  v 
)

设置单元格值

模板参数
T存储的值类型
参数
k索引对
v要设置的值
table.set({0, 0}, 42); // 设置单元格值

◆ set() [2/2]

template<typename T >
void DA::DATable< T >::set ( IndexType  row,
IndexType  col,
const T &  v 
)

设置单元格值

模板参数
T存储的值类型
参数
row行索引
col列索引
v要设置的值
table.set(0, 0, 42); // 设置单元格值

◆ shape()

template<typename T >
DATable< T >::IndexPair DA::DATable< T >::shape ( ) const

获取表格形状

模板参数
T存储的值类型
返回
包含行数和列数的pair
table.set(2, 3, 42);
auto shape = table.shape(); // 返回(3, 4)

◆ size()

template<typename T >
std::size_t DA::DATable< T >::size ( ) const

获取表格元素数量

模板参数
T存储的值类型
返回
表格中的元素数量
table.set(0, 0, 42);
table.set(1, 1, 43);
std::size_t count = table.size(); // 返回2
std::size_t size() const
获取表格元素数量
Definition DATable.hpp:576

◆ transferColumn()

template<typename T >
void DA::DATable< T >::transferColumn ( IndexType  col,
std::function< bool(const T &v) >  trFun 
) const

遍历指定列

模板参数
T存储的值类型
参数
col列索引
trFun遍历函数,如果返回false则停止遍历
table.set(0, 0, 42);
table.set(1, 0, 43);
table.set(2, 0, 44);
// 遍历第0列
table.transferColumn(0, [](const int& v) {
std::cout << v << " ";
return true; // 继续遍历
});
// 输出: 42 43 44
void transferColumn(IndexType col, std::function< bool(const T &v) > trFun) const
遍历指定列
Definition DATable.hpp:970

◆ transfered()

template<typename T >
template<typename OtherType >
DATable< OtherType > DA::DATable< T >::transfered ( std::function< OtherType(const T &v) >  trFun) const

转换表格数据类型

模板参数
T存储的值类型
OtherType目标值类型
参数
trFun转换函数
返回
转换后的表格
DA::DATable<double> doubleTable;
doubleTable.set(0, 0, 42.5);
// 转换为int类型
DA::DATable<int> intTable = doubleTable.transfered<int>([](const double& v) { return static_cast<int>(v); });
// intTable[0, 0] = 42
DATable< OtherType > transfered(std::function< OtherType(const T &v) > trFun) const
转换表格数据类型
Definition DATable.hpp:941

该类的文档由以下文件生成: